又是个水题,刚刚开始没有用搜索,因为对于反素数有:
n=2^t1*3^t2^5^t3*7^t4..... 这里有 t1>=t2>=t3>=t4。
而且相同的因数的情况下,素数越不同越好。
哪知道这个方法错了! = =。
看来还得中规中矩得用dfs。
我觉得还可以优化下,感觉搜索干了很多无用的活儿。
搜索还得好好练练啊...
1 #include<cstdio> 2 #define LL long long 3 using namespace std; 4 int prim[16] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 }; 5 LL n,bestnum,bestsum; 6 void dfs(LL num,LL sum,LL k,LL limit) 7 { 8 if(num>bestnum) 9 { 10 bestnum=num; 11 bestsum=sum; 12 } 13 if(num==bestnum&&bestsum>sum) 14 bestsum=sum; 15 if(k>14) return; 16 for(int i=1;i<=limit;i++) 17 { 18 if(sum*prim[k]>n) break; 19 sum*=prim[k]; 20 dfs(num*(i+1),sum,k+1,i); 21 } 22 } 23 int main() 24 { 25 while(scanf("%lld",&n)!=EOF) 26 { 27 bestnum=0,bestsum=n; 28 dfs(1,1,0,50); 29 printf("%lld ",bestsum); 30 } 31 return 0; 32 }