典型的反素数
对于任何正整数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>=....
1 #include <iostream> 2 using namespace std; 3 4 typedef long long ll; 5 6 int pri[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}; 7 8 ll n; 9 ll ans,s; 10 11 void dfs (ll num,ll k,ll sum,ll limit){ //num:当前枚举到的数,k:枚举到的第k大的质因子;sum:该数的约数个数;limit:质因子个数上限; 12 if (sum>s||(sum==s&&num<ans)) //s:结果的约数个数;ans:结果; 13 s=sum,ans=num; 14 if (k>14) 15 return ; 16 for (int i=1;i<=limit;i++){ 17 num*=pri[k]; 18 if (num>n) 19 break ; 20 dfs (num,k+1,sum*(i+1),i); 21 22 } 23 return ; 24 } 25 26 int main (){ 27 while (cin>>n){ 28 s=0; 29 dfs (1,0,1,50); 30 cout<<ans<<endl; 31 } 32 return 0; 33 }