zoukankan      html  css  js  c++  java
  • 数论 CF27E Number With The Given Amount Of Divisors

    求因子数一定的最小数(反素数)

    #include<iostream>
    #include<string>
    #include<cmath>
    #include<cstring>
    #include<vector>
    #include<map>
    #include<set>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<list>
    #include<sstream>
    #include<cstdio>
    #define INF 0x3f3f3f3f
    const int maxn = 1e3 + 5;
    const double PI = acos(-1.0);
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    //若取前17个素数,其乘积大于要求范围
    ull p[16] = { 2,3,5,7,11,13,17,23,29,31,37,41,43,47,53 };
    
    ull ans;
    ull n;
    
    //depth 当前在枚举第几个素数,num:当前因子数
    //tmp:当前因子数量为num的时候的数值
    //up:上一个素数的幂,这次应该小于等于这个幂次
    
    void dfs(ull depth, ull tmp, ull num, ull up) {
        if (num > n || depth >= 16) return;
        if (num == n && ans >= tmp) {
            ans = tmp;
            return;
        }
        for (int i = 1; i <= up; i++) {
            if (tmp / p[depth] > ans) return;
            dfs(depth + 1, tmp = tmp * p[depth], num * (i + 1), i);
        }
    }
    
    int main() {
        while (scanf("%llu", &n) != EOF) {
            ans = INF;
            dfs(0, 1, 1, 64);
            printf("%llu", ans);
        }
        return 0;
    }
  • 相关阅读:
    hive学习
    spark Streaming
    spark sql
    参考
    数论基础
    2020.07.17模拟3
    2020.07.16模拟2
    关于Linux环境下的对拍
    2020.07.15模拟1
    三体
  • 原文地址:https://www.cnblogs.com/hznumqf/p/12316495.html
Copyright © 2011-2022 走看看