标签:表示 -- 理解 dfs long csdn inpu sdn ref
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 100)
第2 - T + 1行:T个数,表示需要计算的n。(1 <= n <= 10^18)
共T行,每行2个数用空格分开,第1个数是答案,第2个数是约数的数量。
5
1
10
100
1000
10000
1 1
6 4
60 12
840 32
7560 64
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define INF 0x3f3f3f3f 4 #define eps 1e-9 5 #define LL long long 6 #define MX 10005 7 8 const int prim[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; 9 10 LL n; 11 LL big, num; 12 13 void dfs(int step, LL sz, LL yue, int mmm) 14 { 15 if (step>=16) return; 16 if (yue>big) 17 { 18 big = yue; 19 num = sz; 20 } 21 if (yue==big&&sz<num) 22 num = sz; 23 for (int i=1;i<=63;i++) 24 { 25 if (n/sz>=prim[step]&&i<=mmm) 26 dfs(step+1,sz*=prim[step],yue*(i+1),i); 27 else break; 28 } 29 } 30 31 int main() 32 { 33 int T; 34 scanf("%d",&T); 35 while(T--) 36 { 37 scanf("%lld",&n); 38 big=0; 39 dfs(0,1,1,64); 40 printf("%lld %lld\n",num,big); 41 } 42 return 0; 43 }
标签:表示 -- 理解 dfs long csdn inpu sdn ref
原文地址:http://www.cnblogs.com/haoabcd2010/p/7623552.html