zoukankan      html  css  js  c++  java
  • 模板:筛素数法

    参考:http://blog.csdn.net/liukehua123/article/details/5482854

    1.开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.

        2.然后:

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

          {   if(prime[i])

              for( j=i+i; j<=n; j+=i ) prime[j]=false;

          }

        3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。

        原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质

    数的倍数筛掉。

    Code:

     1 #include <cmath>
     2 
     3 #define MAX_NUM 10000
     4 
     5 
     6 bool * arr_prime = new bool[MAX_NUM + 1];
     7     
     8 for(i = 3; i <= MAX_NUM; i += 2) arr_prime[i] = true;
     9 for(i = 4; i <= MAX_NUM; i += 2) arr_prime[i] = false;
    10 arr_prime[2] = true;
    11 
    12 int sqrt_mn = sqrt(MAX_NUM);
    13 
    14 for(i = 3; i < sqrt_mn; i += 2)
    15 {
    16     if(arr_prime[i])
    17     {
    18         for(j = i + i; j <= MAX_NUM; j += i) arr_prime[j] = false;
    19     }
    20 }
    21     
  • 相关阅读:
    json转换字符串
    windows下Xshell远程访问虚拟机
    win7去箭头指令
    n核CPU为什么计算速度达不到单核n倍
    vim字符串的替换
    转发的别人的vim编码和终端编码的设置
    音频操作
    scanf函数
    文字常量区和栈区区别
    Linux 进程
  • 原文地址:https://www.cnblogs.com/mobileliker/p/3933398.html
Copyright © 2011-2022 走看看