2015.07.15——prime素数

prime素数

1.素数也叫质数,定义是一个数只能被1和它自身整除。

  素数从2开始,0,1都不是素数。

2.素数的判断(C++)

3.给定某个数,求小于这个数的所有素数

 

2.素数的判断(C++)  

1 bool   IsPrimer(int   n)   
2   {   
3       int   m=sqrt(n);   
4       for(int i=2;i<=m;i++)      //只看从0-sqrt(n)
5       {   
6           if(n%i==0)   return   false;   //被1,n之外的数整除
7       }   
8       return   true;   
9   } 

  不需要看0-n的数,只看0-sqrt(n)即可

3.给定某个数,求小于这个数的所有素数

  基于Sieve of Eratosthenes

  https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

  从2-sqrt(n)开始,将i*i排除,i*i + i 排除,这些均可以被i整除。除了这些之外的数即为素数

 1 class MyClass
 2 {
 3 public:
 4     vector<int> coutPrimes(int n)
 5     {
 6         vector<bool> prime(n, true);
 7         vector<int> res;
 8         prime[0] = false; prime[1] = false;
 9         int k = sqrt(n);
10         for (int i = 2; i <= k; i++)
11         {
12             if (prime[i])                                //每次判断prime[i]是否为true
13             {
14                 for (int j = i*i; j < n; j += i)
15                 {
16                     prime[j] = false;                    //若不是prime则置为false,下次判断直接略过
17                 }
18             }
19         }
20         for (int i = 0; i < n; i++)
21         {
22             if (prime[i]) res.push_back(i);            //将所有素数输出
23         }
24         return res;
25         //return count(prime.begin(), prime.end(), true);
26     }
27 };

如图所示

排除可以被2整除的                        排除可以被3整除的                           排除可以被5整除de

 

posted on 2016-07-15 11:25  zhuzhu2016  阅读(376)  评论(0)    收藏  举报

导航