1722 整数因子分解问题 ╰+哭是因爲堅強的太久メ 2022-02-17 06:46 151阅读 0赞 ### 整数因子分解问题 ### Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 大于1的正整数n可以分解为:n=x1\*x2\*…\*xm。例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6\*2; 12=4\*3; 12=3\*4; 12=3\*2\*2; 12=2\*6; 12=2\*3\*2; 12=2\*2\*3。 对于给定的正整数n,计算n共有多少种不同的分解式。 Input 输入数据只有一行,有1个正整数n (1≤n≤2000000000)。 Output 将计算出的不同的分解式数输出。 Sample Input 12 Sample Output 8 #include <stdio.h> #include <map> using namespace std; map<int,int>m; int dfs (int n) { if (n == 1 ) return 1; if(m[n]) //搜索过 return m[n]; int cnt = 1; for (int i=2; i*i<=n; i++){ if (n%i == 0) { cnt = cnt + dfs(i); if (i != n/i) //除了开方数其他都是计算两个相乘为n的数 cnt = cnt + dfs(n/i); } } m[n] = cnt; return cnt; } int main () { int n; scanf("%d",&n); printf("%d\n", dfs(n)); return 0; }
还没有评论,来说两句吧...