HDU 4133
注意题目中的一句话:If a number m has bigger evaluating value than all the numbers smaller than it。。。
这让我重新想过反素数的定义,应该 是比n小的数的约数的个数都 小于 n。所以,应该取最小的一个值
#include <iostream> #include <cstdio> #include <algorithm> #define LL __int64 using namespace std; LL n,ans,c; LL p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; void solve(LL dep, LL tmp, LL num){ if(tmp>n) return ; if(num>c||(num==c&&tmp<ans)){ ans=tmp; c=num; } // cout<<tmp<<endl; for(LL i=1;i<=60;i++){ if(tmp*p[dep]>n) break; solve(dep+1,tmp*p[dep],num*(i+1)); tmp*=p[dep]; } } int main(){ int t,kase=0; scanf("%d",&t); while(t--){ scanf("%I64d",&n); ans=-1; c=0; solve(0,1,1); printf("Case #%d: %I64d\n",++kase,ans); } return 0; }