最复杂的数(反素数)

最复杂的数

题目

题解:

这题求的是反素数,本质上是一种dfs方法。看完这个博客就很容易懂啦
反素数深度分析

#include<bits/stdc++.h>
using namespace std;
const int maxn=16;
int prime[maxn]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
long long n;
long long ans,best;
void dfs(int dept,long long cur, long long num , int pre)
{
    if(dept>=maxn) return;
    if(num>best)
    {
        best=num;
        ans=cur;
    }
    else if(num==best&&ans>cur)
    {
            ans=cur;
    }
    for(int i=1;i<=pre;i++)
    {
//      cout<<cur<<endl;
        if(n/prime[dept]<cur)
        { 
//          cout<<"---"<<endl;
            break;
        }
        cur*=prime[dept];
        dfs(dept+1,cur,num*(i+1),i);
    }
}
int main()
{
    int T,i,j,k,temp;
    long long sum;
    best=-1;
    cin>>T;
    while(T--)
    {
        cin>>n;
        best=-1;
        dfs(0,1,1,65);
        cout<<ans<<" "<<best<<endl; 
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40859716/article/details/80528821