1 条题解

  • 1
    @ 2021-8-7 21:30:13

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    long long p[20]= {0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
    long long maxn=-1,ans=-1;
    long long n=0;
    void get(long long m,long long f,long long t,long long pr) {
        //f为当前质数的编号,当前指数<pr
    //t为当前约数的个数, m表示当前可能成为最优解的数
        if(t>maxn || (t==maxn && m<ans)) { //更新最优解
            ans=m,maxn=t;
        }
        long long i=m,j=0;
        long long nt=0;
        while(j<pr) { //j表示的是当前正在搜索的指数
            j++;
            if(n/i<p[f]) { //若不满足条件就跳出循环(i表示的是当前的m)
                break;
            }
            nt=t*(j+1),i*=p[f];//更新新数以及它的因子个数。
            if(i<=n) { //若i(即当前的m)在区间[1,n]内就继续搜索。
                get(i,f+1,nt,j);
            }
        }
    }
    int main() {
        scanf("%lld",&n);
        get(1,1,1,30);
        printf("%lld",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    109
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    56
    已通过
    41
    上传者