Counting Factor Trees zoj 3405

Counting Factor Trees
Time Limit: 2 Seconds      Memory Limit: 65536 KB

Factoring, i.e., listing all the prime factors, of an integer is a useful skill that often helps to solve math problems. For example, one of the ways to find the GCD (Greatest Common Divisor) or LCM (Least Common Multiple) of two integers is by listing all their prime factors. The GCD is then the product of all the common factors; the LCM is the product of all the remaining ones.

The Factor Tree is a tool for finding such prime factorizations. The figure below demonstrates three factor trees of 108. At the beginning a root with a number is given, say N, which is to be factored. Then, the root is factored into two children N1 and N2 such that N = N1 × N2 (N1 ≥ 2, N2 ≥ 2). Note that N1 and N2 need not be prime. The same factoring process continues until all the leaves are prime.

Three factor trees for 108

While the prime factorization is unique, the factor tree reflects the order in which the factors were found, and is by no means unique. So, how many factor trees of a number are there?

Input

There are no more than 10000 cases. A line containing an integer N (2 ≤ N ≤ 1000000000) is given for each case.

Output

Print the number of factor trees of N in a line for each case. The answer will be fit in a signed 64-bit integer.

Sample Input
12
108
642485760
Sample Output
6
140
9637611984000

Author: GAO, Yuan
Contest: ZOJ Monthly, September 2010

好悲剧!比赛时候没做出来,赛后CE,TLE过也就算了,还给我来过Floating Point Error (由于prime[i]算的不够多导致x除0!!!)

TLE的注意一下Method函数,也就是求x个元素有多少中排列方法的函数:

原来写成了

int Method(int num)

{

       if(a[num])

              return a[num];

       int i,j;

       int temp=0;

       for(i=1;i<=num/2;i++)

       {

              temp+=Method(i)*Method(num-i)*2;

       }

       if(num%2==0)

              temp-=Method(num/2)*Method(num/2);

       return temp;

}

 

= =!

这样              temp-=Method(num/2)*Method(num/2); 岂不是要再算一遍!!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值