高效算法.只要循环最大值的开方次.从2到最大值的开方循环,每次都将数组中所有是i的倍数的数删除,最后剩下的就是素数.
比如:第一次删除2的倍数4,6,8,10,12...100
第二次删除3的倍数6,9,12,15...99.
第三次删除5的倍数10,15,20...95,100
第四次删除7的倍数14,21,28...91,98
总共循环了四次
在程序中实现删除就是在数组的相应位置标1.
改变程序中的MaxNumber的值,可以得到任何范围的素数.
#include
#include
const int MaxNumber=100;
using namespace std;
void main()
{
int a[MaxNumber+1]={0},sq,i,j;
sq=sqrt(MaxNumber);//需要循环的次数为最大值的开方
for(i=2;i
if(a[i])continue;//如果已经被标为1,说明是前面的某个数的倍数,跳过这一次
j=2;
while(1)//将所有是i的j(j>1)倍的值标为1,表示不是素数
{
if(i*j>MaxNumber)break;
a[i*j]=1;
j++;
}
}
for(i=2;i<=MaxNumber;i++)
if(a[i]==0)
cout<}
#include "stdio.h"
void main()
{
int i,j;
for(i=2;i<101;i++)
{
for(j=2;j {
if(i%j==0)
break;
}
if(j==i) printf("%d ",i);
}
}
for(int i = 2;i<100;i++)
{
for()
}
#include
using std::cout;
main()
{
int i,j,a=1,s=0,qr;
for(i=2;i<100;i++)
{
qr= (int)sqrt(i);
for(j=2;j
else a=1;
if(a) s+=i;//如果a是质数,s累加
}
cout << s << endl;
}
#include
using namespace std;
int main()
{
int a = 0;
for (int i = 1; i <= 1000; i++)
{
for (int j = 2; j{
if (i%j == 0)
break;
}
if (j == i)
{
cout << i << " ";
a++;
if (a == 10)
{
cout << endl;
a = 0;
}
}
}
}