我想打印前1000个素数的总和。我不知道以下实现是否正确以及在哪里错误。此外,我该如何优化这种实现方式,这是额外偏离路线所必需的?
#include<stdio.h>
#include<math.h>
int prime(int no,int lim)
{
int i=2,flag=0;
for(;i<=lim;i++)
{
if(no%i==0)
{
flag=1;
}
}
return flag ;
}
int main()
{
int i=4,count=2,j,k,l,n=4;
double sum=5.0;
for(;count<=1000;)
{
j=sqrt(i);
k=prime(i,j);
if(k==0)
{
//printf("\n%d",i);
sum+=(double)i;
//for(l=0;l<100000;l++);//just to reduce speed of the program
count++;
}
i++;
}
printf("\n%f",sum);
return 0;
}
答案 0 :(得分:1)
我不知道以下实现是否正确以及在哪里出错。
该实现是正确的,除了一个不正确的错误:由于count
是已经考虑的素数,因此循环条件count<=1000
导致循环运行一次如果已经累加了1000个素数,则需要更多的时间,再加上1001个素数。正确的是:count<1000
。
答案 1 :(得分:0)
要优化代码,最好使用 Erastothethenes筛子生成最大数量的质数,然后添加这些质数。要了解筛子的工作方式,请阅读this文章。