标签:
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
标签:
原文地址:http://www.cnblogs.com/zhuzhu2016/p/5672981.html