对于任何正整数x,记约数的个数记做g(x).例如g(1)=1,g(6)=4.
如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数.
性质一:一个反素数的质因子必然是从2开始连续的质数.
性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....
#include <cstdio> #include<iostream> #include<cstring> using namespace std; long long prim[14]={2,3,5,7,11,13,17,19,23,29,31,37,41,43}; long long ans,ans_sum,n; void back_prim(long long cnum,long long csum,long long k,long long limit){ if(cnum>n) return ; else if(csum>ans_sum) ans=cnum,ans_sum=csum; else if(csum==ans_sum && cnum<ans) ans=cnum; long long p=prim[k]; for(int i=1;i<=limit;i++,p*=prim[k]){ if(cnum*p>n) break; else back_prim(cnum*p,csum*(i+1),k+1,i); } } int main(int argc, char** argv) { while(scanf("%lld",&n)!=-1){ ans=1,ans_sum=1; back_prim(1LL,1LL,0,50); printf("%lld\n",ans); } return 0; }