用筛法求100以内素数,什么叫筛法????????????????????????????????????????????????????
筛法就是像筛子一样,把不是素数的数字(合数)删掉,剩下的就是素数
这里有更详细的解释和例子程序
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
cout<<"100以内的全部素数:"<<endl;
int i,j,k;
int a[101];
for(i=1;i<=100;i++)
{
a[i]=i;
}
a[1]=0; //先挖掉a[1]
for(i=2;i<sqrt(100);i++)
{
for(j=i+1;j<=100;j++)
{
if(a[i]!=0&&a[j]!=0)
{
if(a[j]%a[i]==0)
{
a[j]=0; //把非素数挖掉,不是素数的都赋值为0
}
}
}
}
cout<<endl;
for(i=1,k=0;i<=100;i++)
{
if(a[i]!=0) //选出值不为0的数 即素数
{
cout<<setw(5)<<a[i];
k++;
}
if(k==10) //输出10个数后换行
{
cout<<endl;
k=0;
}
}
cout<<endl;
return 0;
}
应该在学c的时候就接触了吧
百度筛法求素数 csdn会出来好多
用一个flag数组标记某个数是否是素数,初始值设为true,0和1就设为false(不设也没关系,用不到)
从2开始枚举,当遇到flag[i]=true时,将所有100以内该 i 的倍数x,做如下操作flag[x]=false
这样就能找出100以内的素数了
(其中 x = i * n,内层循环枚举1到无穷,调节是i * n <= 100 就行了)
#include
#include
#include
using namespace std;
int main()
{
cout<<"100以内的全部素数:"<<endl;
int i,j,k;
int a[101];
for(i=1;i<=100;i++)
{
a[i]=i;
}
a[1]=0; //先挖掉a[1]
for(i=2;i<sqrt(100);i++)
{
for(j=i+1;j<=100;j++)
{
if(a[i]!=0&&a[j]!=0)
{
if(a[j]%a[i]==0)
{
a[j]=0; //把非素数挖掉,不是素数的都赋值为0
}
}
}
}
cout<<endl;
for(i=1,k=0;i<=100;i++)
{
if(a[i]!=0) //选出值不为0的数 即素数
{
cout<<setw(5)<<a[i];
k++;
}
if(k==10) //输出10个数后换行
{
cout<<endl;
k=0;
}
}
cout<<endl;
return 0;
}