积少成多

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  • 什么是质数?

只有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;
    }
};

 

 

posted on 2016-06-01 14:44  x7b5g  阅读(256)  评论(0编辑  收藏  举报