分治算法
整数因子分解
问题描述
大于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 * 3
12 = 2 * 2 * 3
对于给定的正整数n,编程计算n共有多少种不同的分解式。
输入
数据有多行,给出正整数n(1 <= n <= 20000000000)
输出
每个数据输出1行,是正整数n的不同分解式数量。
样例输入
12
35
样例输出
8
3
【算法分析】
考虑到,对于n,都是由它的因子相乘而来。而分解的因子可以继续分解,直到分解为质数。所以对n的每个因子进行递归搜索。
算法
int total;
void solve(int n)
{
if(n == 1) total++;
else
for(int i = 2; i <= n; i++)
{
if(n % i == 0) solve(n/i);
}
}
// 主函数
int n;
while(scanf("%d",&n