zoukankan      html  css  js  c++  java
  • 【数论学习笔记】质数

      质数判定:

        试除法:2到sqrt(n)全部试除。代码如下。

    inline bool prime1(int n){
        if(n<2) return 0;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0) return 0;
        return 1;
    }

      质数筛法:

        Eratosthenes筛法:所有质数的倍数全部为合数,每求到一个质数,统计倍数。代码如下。

    int v[maxn];
    inline void prime2(int n){
        memset(v,0,sizeof(v));
        for(int i=2;i<=n;i++){
            if(v[i]) continue;
            printf("%d ",i);
            for(int j=i;j<=n/i;j++) v[i*j]=1;
        }
    }

        线性筛法:

          1. 2到 N 的每一个数若 v[i]=i 则为质数。

          2.扫描不大于v[i]的每一个质数p,令v[i*p]=p,也就是记录最小的质因子。

          代码如下。

    int prime[maxn],v[maxn];
    inline void prime3(int n){
        memset(v,0,sizeof(v));
        int m=0;
        for(int i=2;i<=n;i++){
            if(v[i]==0){v[i]=i;prime[++m]=i;}
            for(int j=1;j<=m;j++){
                if(prime[j]>v[i]||prime[j]>n/i) break;
                v[i*prime[j]]=prime[j];
            }
        }
        for(int i=1;i<=m;i++) printf("%d ",prime[i]);
    }

       质因数分解:

        算数基本定理:任何一个大于1的正整数都能分解成有限个质数的乘积。

        写作:N=p1^c1*p2^c2*....pm^cm。ci 为正整数,pi 为质数。

        试除法:质数判定试除法+质数筛选欧拉筛。代码如下。

    inline void divide(int n){
        int m=0;
        for(int i=2;i<=sqrt(n);i++){
            if(n%i==0){//i为质数
                p[++m]=i,c[m]=0;
                while(n%i==0) n/=i,c[m]++;//除掉i
            }
        }
        if(n>1)//最后n是质数
            p[++m]=n,c[m]=1;
        for(int i=1;i<=m;i++) printf("%d^%d
    ",p[i],c[i]);
    }
  • 相关阅读:
    osg::PagedLOD example
    osg::NodeVisitor example
    osg::NodeVisitor
    osg::NodeVisitor osg3.4.0
    Visual studio 正在从以下位置加载符号:Microsoft符号服务器 尝试取消禁用后续符号加载
    osgViewer::Viewer::Windows
    Inventor2018专业版软件安装激活教程
    osg osgUtil::LineSegmentIntersector
    Civil 3D百度云地址
    osg define shape(create box)
  • 原文地址:https://www.cnblogs.com/ChrisKKK/p/10833536.html
Copyright © 2011-2022 走看看