zoukankan      html  css  js  c++  java
  • 数组比特【编程珠玑】如何优化程序打印出小于100000的素数

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

        

    问题描述

     2开始到n-1都不能整除则为素数。

        

    化优

        

    1. 2sqrt(n)不能整除以可就
    2.  通过对被235整除的殊特检修,避免了近3/4的开方运算,其次,只斟酌奇数作为可能的因子,在残余的数中避免了大约一半的整除检修(注意一点,2,3,5本身也是素数)(If( n%2 == 0 ) return (n==2); //能被2整除且不是2本身的不是素数)
    3. 用乘法运算取代开方运算
    int prime(int n)
    {
    	if(n%2==0)return (n==2);
    	if(n%3==0)return (n==3);
    	if(n%5==0)return (n==5);
    	for(int i=7; i*i<=n; i+=2)
    		if(n%i==0)return 0;
    	return 1;
    }

        

    单简的埃氏法筛

        现实单简的埃氏法筛Sieve of Eratosthenes来盘算有所小于n的素数。这个程序的重要数据结构是一个n比特的数组,初始值都为真。每发明一个素数时,数组中有所这个素数的倍数就设置为假。下一个素数就是数组中下一个为真的比特。

        每日一道理
    在每个人心中,都曾停留过那些值得怀念的人,也许还在,也许早已消逝,在茫茫人海中丢失,于是,那份怀念便得凄凉,因为模糊的记忆中只剩下一个“空壳”,没有什么,甚至连自己的心都装不下,时间把一切抹平,也把当日的泪水封锁,因为已经没有,怀念只是悲凉!

        

    析解

        上面的C程序现实了埃氏法筛来盘算有所小于n的素数。其基本数据结构是n比特数组x,初始值部全为1。每发明一个素数,数组中有所它的倍数都设为0。下一个素数就是数组中的下一个取值为1的比特位。

    #include <iostream>  
    using namespace std;   
    int main( ){ 
        int i, p, n;
        char x[100001];
        n = 100000;    
        
        for (i = 1; i <= n; i++)
             x[i] = 1;    
        x[1] = 0;  //1不是素数       
        p = 2;     //第一个素数
        while (p <= n){     
          cout<<p<<" ";   
          for (i = 2*p; i <= n; i = i+p)    
              x[i] = 0;    
          do 
              p++;    
          while (x[p] == 0);  //到得第一个标记为1的数,为素数  
          }
    }

        

     

        =======================================================

        

        

     

        

        转载请注明出处

        

        :

        http://blog.csdn.net/utimes/article/details/8863999

        

        

     

        =======================================================

        

    文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3050596.html
Copyright © 2011-2022 走看看