码迷,mamicode.com
首页 > 其他好文 > 详细

模板:筛素数法

时间:2014-08-24 22:04:03      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   for   ar   art   div   log   

参考: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     

 

模板:筛素数法

标签:style   blog   http   color   for   ar   art   div   log   

原文地址:http://www.cnblogs.com/mobileliker/p/3933398.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!