#include<bits/stdc++.h>
using namespace std;
int c;
void f(int x)
{
int i;
int a = sqrt(x);
for(i = 2; i <= a; i++)
{
if(x % i == 0) //如果能除尽,就继续递归
{
f(i);
if(i*i==x) c++; //刚才递归的那个,如果相乘=X,就不能重复算
else
{
f(x/i);
c += 2;
}
}
}
}
int main()
{
int n;
cin >> n;
f(n);
cout << c+1 << endl; //加上它本身
return 0;
}
好像是懂了吧= =
还有一个整数划分
#include<bits/stdc++.h>
using namespace std;
int f(int n, int m)
{
if(n == 1 || m == 1) return 1; //无论谁等于一,都只有1+1+1+...+1一种划分方法
else if(n == m) return f(n, n-1)+1; //当划分包含n时,就一种,然后就再递归n-1(n=m)
else if(n < m) return f(n, n); //划分的数就是n,你也不可能大于n,但这个感觉用不到
else return f(n, m-1)+f(n-m, m); //包含m时,说明已经有一个m了,需要划分剩下的n-m,比如f(6,4),已经存在4的话,就需要根据m 划分剩下的2;如果不包含m,说明小于m,即小于等于m-1
}
int main()
{
int n;
cin >> n;
cout << f(n, n);
return 0;
}