【问题标题】:c program to find sum of first 1000 prime numberc程序查找前1000个素数的总和
【发布时间】:2019-02-05 12:58:25
【问题描述】:

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

【问题讨论】:

标签: c


【解决方案1】:

不知道下面的实现对不对,错在哪里。

实现是正确的,除了一个错误:由于count是已经考虑的素数的数量,循环条件count&lt;=1000导致循环在1000时再运行一次素数已经相加,加上 1001. 素数。正确的是:count&lt;1000

【讨论】:

    【解决方案2】:

    要优化您的代码,您最好使用 埃拉托色尼筛法 来生成达到极限的素数,然后添加这些素数。要了解 sieve 的工作原理,请阅读 this 文章。

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 2022-01-09
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      相关资源
      最近更新 更多