B - 整数因子分解问题
Description
大于1的正整数n可以分解为:n=x1x2…xm。例如,当n=12 时,共有8 种不同的分解式:
12=12;
12=62;
12=43;
12=34;
12=322;
12=26;
12=232;
12=22*3。
对于给定的正整数n,计算n共有多少种不同的分解式。
Input
输入数据只有一行,有1个正整数n (1≤n≤2000000000)。
Output
将计算出的不同的分解式数输出。
Sample
Input
12
Output
8
#include#include #include long long int f(int x); int a[500000]; int main() { int n; scanf("%d",&n); printf("%lldn",f(n)); } long long int f(int x) { int i; long long sum=1; if((x<500000)&&a[x]!=0) { return a[x]; } for(i=2;i<=sqrt(x);i++) { if(x%i==0) { sum+=f(i); if(i*i!=x) { sum+=f(x/i); } } } if(x<500000) a[x]=sum; return sum; }



