zoukankan      html  css  js  c++  java
  • 素数算法

    看着空荡荡的博客不知道写些什么,写些以前的心得吧

    素数算法比较的常用,这次就写它了。

    这里我给出自己常用的写法

    写法1:

    int n=10000;
        int prime[10000];                   //用于存储素数
        int num=0;
        int j;
        for(int i=2;i<=n;i++){
            for(j=2;j<=sqrt(i);j++){        //里层只要循环到sqrt(i)就行了
                if(i%j==0)
                    break;
            }
            if(j>sqrt(i))prime[num++]=i;

    没有太多好讲的地方,就这几行,思路非常简单,只是把最基础的内层循环j<=n替换成了j<=sqrt[i],小优化了一下而已

    写法2:素数筛

        int num=0;
        int n=10000;
        int prime[10000];                   //用于存放素数
        int flag[10005];                    //用于判断i是否为素数
        memset(flag,0,sizeof(flag));
        for(int i=2;i<=n;i++){
            if(flag[i]==0){
                prime[num++]=i;
                for(int j = i+i; j<=n; j+=i)
                    flag[j]=1;
            }
        }

    非常常用的一个算法,思路也很简单,每找到一个素数之后,把它的倍数筛掉(因为肯定不是素数),这样时间复杂度就被降低到了线性,所以又称线性素数筛法

  • 相关阅读:
    STOAdiary20110315完成的任务
    java MD5 密码加密例子
    STOAdiary20110316完成的任务
    个人实习总结
    STOAdiary20110317完成的任务
    Android 操作XML的几种方式
    Ubuntu 桌面图标不见,鼠标右键的问题
    20110329日记
    MySql 中文问题的处理
    20110312wmh日记
  • 原文地址:https://www.cnblogs.com/xinzhiyan/p/7822769.html
Copyright © 2011-2022 走看看