求素数时,为什么非要开根号?
例题:计算并输出1000以内最大的10个素数以及它们的和。 要求:
(1)在程序内部加必要的注释。
(2)由于偶数不是素数,可以不考虑对偶数的处理。
(3)虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。
(4) 输出形式为:素数1+素数2+素数+…+素数10=总和值。
我编的代码是:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int i,k,a[10],j=0,sum=0,n=999;
for( ;n>1;n-=2)
{
k=1; /k用来标记数,n为素数时k=1,否则k=0
for(i=2;i<sqrt(n);i++)
{
if(n%i==0)
{k=0;break;}
}
if(k)
{
a[j]=n;
j++; //将素数赋给数组a[10],并用j(j<=10)标记素数个数
}
if(j==10)
break; //当数组中素数个数达到10时,跳出循环,不再计算其他素数
}
for(i=0;i<j;i++)
sum+=a[i]; //计算数组中j(j<=10)个素数的和
cout<<a[0];
for(i=1;i<j;i++)
cout<<"+"<<a[i];
cout<<"="<<sum<<endl;
return 0;
}
如果将第十行:for(i=2;i<=sqrt(n);i++)改为:for(i=0;i<=n;i++)就会漏掉961,我想不通为什么,开根号不是为了简化计算吗?还是说,我写的代码有问题?请教大家,谢谢!