素数

  1. #define SIZE 1000
  2. #include <math.h>
  3. bool p[SIZE];
  4. void prime()
  5. {
  6. //我推荐这个算法! 易于理解。 只算奇数部分,时空效率都还不错!
  7. int half=SIZE/2;
  8. int sn = (int) sqrt(double(SIZE));
  9. for (int i = 0; i < half; i++)
  10. p[i] = true;// 初始化全部奇数为素数。p[0]对应3,即p[i]对应2*i+3
  11. for (int i = 0; i < sn; i++) {
  12. if(p[i])//如果 i+i+3 是素数
  13. {
  14. for(int k=i+i+3, j=k*i+k+i; j < half; j+=k)
  15. // 筛法起点是 p[i]所对应素数的平方 k^2
  16. // k^2在 p 中的位置是 k*i+k+i
  17. // 下标 i k*i+k+i
  18. //对应数值 k=i+i+3 k^2
  19. p[j]=false;
  20. }
  21. }
  22. //素数都存放在 p 数组中,p[i]=true代表 i+i+2 是素数。
  23. //举例,3是素数,按3*3,3*5,3*7...的次序筛选,因为只保存奇数,所以不用删3*4,3*6....
  24. }
  25. int main()
  26. {
  27. prime();
  28. return 0;
  29. }





附件列表

    原文地址:https://www.cnblogs.com/sober-reflection/p/bac2a45be7466237e00f8253ecef8dd4.html