zoukankan      html  css  js  c++  java
  • 试除法的妙用【O(√N) 复杂度】

    一 、判某一质数

    bool is_prime(int n) {
        for(int i=2;i<=sqrt(n);++i) {
            if(n%i==0) return false;
        }
        return true;
    }

     

    二、分解质因数

    #include<stdio.h>
    #include<algorithm> 
    using namespace std;
    int n,cnt,p[1001],c[1001];
    
    void div() {
        int x=n;
        for(int i=2;i*i<=n;++i) {
            if(x%i==0) {
                p[++cnt]=i;
                while(x%i==0) {
                    x/=i;
                    c[cnt]++;
                }
            }
        }
        if(x>1) p[++cnt]=x,c[cnt]++; 
    }
    
    int main() 
    {
        scanf("%d",&n);
        div();
        for(int i=1;i<=cnt;++i) 
            printf("%d^%d
    ",p[i],c[i]);
        return 0;
    }

     

    三、求正约数集合

    ·N本身

    #include<stdio.h> 
    #include<algorithm> 
    using namespace std;
    int n,cnt,factor[1001];
    
    void Get() {
        for(int i=2;i*i<=n;++i) {
            if(n%i==0) {
                factor[++cnt]=i;
                if(i*i!=n) factor[++cnt]=n/i; 
            }
        }
    }
    
    int main() 
    {
        scanf("%d",&n);
        Get();
        for(int i=1;i<=cnt;++i) {
            printf("%d ",factor[i]);
        }
        return 0;
    }  

    ·拓展——1~N(倍数法)

    #include<stdio.h> 
    #include<vector>
    #include<algorithm> 
    using namespace std;
    int n;
    vector<int> v[1001];
    
    void Sol() {
        for(int i=1;i<=n;++i) {
            for(int j=1;i*j<=n;++j) {
                v[i*j].push_back(i);
            }
        }
    }
    
    int main() 
    {
        scanf("%d",&n);
        Sol();
        for(int i=1;i<=n;++i) {
            printf("%d: ",i);
            for(int j=0;j<v[i].size();++j) {
                printf("%d ",v[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }

    时间复杂度O(N + N/2 +N/3 ……+N/N) =O(NlogN) 

    倍数法的推论

      1~N 每个数的约束个数总和大约为 NlogN

  • 相关阅读:
    怎么往mac中finder个人收藏里添加文件夹
    UIView 动画
    添加.pch文件
    声明属性的关键字
    创建app前的环境配置/AppIcon/启动图片
    修改动画的旋转支点
    实现自定义xib和storyboard的加载,
    Quartz2D绘图 及实例:下载进度
    帧动画
    在职研究生第一单元第二单元第三单元第四单元是什么?
  • 原文地址:https://www.cnblogs.com/qseer/p/9786845.html
Copyright © 2011-2022 走看看