解题思路:

注意事项:

参考代码:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

#define maxm 2000010

int prime[maxm];

int s[maxm];

void Prime(int n)//求n以内的素数

{

   int i,k,t;

   for (i=2;i<=n;i+=2) s[i]=0; //所有的偶数不可能为素数 赋值为0

   for (i=1;i<=n;i+=2) s[i]=1; //所有奇数先赋值为1

   s[1]=0; s[2]=1;

   for (i=3;i<=sqrt(n);i+=2)

   {

       if (s[i])

   {

          //应为所有偶数已经剔除,所以此处t=3*i(相当于)也就是此次剔除的仍是奇数,所以避免了重复剔除偶数,速度快。

          t=3*i;

          while (t<= n)

  {

             s[t]=0;

             t=t+2*i; //奇数加偶数为奇数 奇数加奇数为偶数 所以加2i为奇数 避免重复剔除偶数

  }

   }

   }

   k=1; prime[1]=2;

   for (i=3;i<=n;i+=2)

   {

         if (s[i]==1) { k++; prime[k]=i; }

   }

   prime[0]=k; //p[0]为1到n之间多少个素数

}

int main()

{

    int  i, n;

    unsigned long long sum = 0;

scanf("%d", &n);

Prime(n);

for(i = 1; i <= prime[0]; i++)

{

          sum += prime[i];

}

printf("%llu", sum);

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论