- 什么是质数?
只有1和它本身两个因数的数,就是质数(或素数);
除了1和它本身以外,还有别的因数的数,就是合数;
- 质数被用在了哪里?
1,现在密码学,RSA加密问题,bob,alice,蒂夫三个小伙伴之间的通信的问题
2、在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数最好设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。
3、在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。
4、以质数形式无规律变化的导弹和鱼雷可以使敌人不易拦截。
5、多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。
- 编程实现求质数的问题? 1,给定一个数N,打印出小于N的所有质数。2,给定一个数N,打印出自然数中最小的N个质数。
https://program-think.blogspot.com/2011/12/prime-algorithm-1.html [作者编程随想],作者显然和等着找工作的人不在一个维度上。
- 试除法,
因为从判断一个数x是不是质数,按照定义:把x除以[1,..,(x-1)]看余数是否为零?如果在除的过程中余数为零,则x不是质数。
因为x如果由(除自身以外)的因数(什么是质因数),那么这个因数肯定小于等于x/2,可以判断 [1,...,x/2],看是否余数为零。
又因为x,除了2以外,所有可能的质因数都是奇数,那么可以先判断2,再从[3...x/2]中的奇数即可
又因为如果x不是质数,那么x的因子肯定是成对出现m1,m2的;m1,m2二个数中肯定有一个大于√x ,另一个小于√x ,那么可以先判断2,再从[3,..,√x ]中的奇数即可
最后只需要 判断[3... √x ] 中的质数即可。
- 筛选法,
首先,2是公认最小的质数,先把2的倍数去掉
剩下2的那些大于2的数里面,最小的是3,那么3也是质数,
接着把3的倍数都去掉,最小的数是5,5也是质数。
来自维基百科的图片
=============利用位图思想来做存储容器。
leetcode 204 Count Primes
Description:
Count the number of prime numbers less than a non-negative number, n.
class Solution { public: int countPrimes(int n) { bitset<10000000> b; for(int i = 0;i<n;i++){ b.set(i,1); } int re = 0; for(int i = 2;i*i<n;i++){ if(b[i]){ for(int k = i;k<(n+1);k = k+i){ if(k==i)continue; b.set(k,0); } }/// }///for for(int i = 2;i<n;i++){ if(b[i]){ re++; } } return re; } };