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

  • 相关阅读:
    正则表达式去掉文件路径中的特殊字符
    用MD5加密字符串
    FTP响应码
    简述MD5校验文件
    SQLServer存储过程帮助类
    MySql数据库帮助类:DbHelperMySQL
    SQLServer数据库帮助类:DbHelperSQL
    基于Window10搭建android开发环境
    Ubuntu14.04搭建Android O编译环境
    Sublime text 3搭建Python开发环境及常用插件安装
  • 原文地址:https://www.cnblogs.com/qseer/p/9786845.html
Copyright © 2011-2022 走看看