c程序查找前1000个质数之和

时间:2019-02-05 12:58:25

标签: c

我想打印前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;   
}

2 个答案:

答案 0 :(得分:1)

  

我不知道以下实现是否正确以及在哪里出错。

该实现是正确的,除了一个不正确的错误:由于count是已经考虑的素数,因此循环条件count<=1000导致循环运行一次如果已经累加了1000个素数,则需要更多的时间,再加上1001个素数。正确的是:count<1000

答案 1 :(得分:0)

要优化代码,最好使用 Erastothethenes筛子生成最大数量的质数,然后添加这些质数。要了解筛子的工作方式,请阅读this文章。