当前位置: 代码迷 >> 综合 >> poj 3604 Professor Ben 组合计数
  详细解决方案

poj 3604 Professor Ben 组合计数

热度:14   发布时间:2024-01-19 06:21:04.0

题意:

给一个数n,设它有因子a1,a2,a3..am,每个因子a[i]的因子个数为bi,求sum(b1^3+b2^3+...b^m)。

思路:

用到两个公式sum(1^3+2^3...k^3)==(k*(k+1)/2)^2,设n=x1^y1*x2^y2...xt^yt,那么n的因子个数(y1+1)*(y2+1)...*(yt+1).设T(x)==1^3+2^3+..x^3,结果为T(y1+1)*T(y2+1)*...T(yt+1)。

代码:

//poj 3604
//sepNINE
#include <iostream>
using namespace std;
int main()
{int cases;scanf("%d",&cases);while(cases--){int n;scanf("%d",&n);if(n==1){printf("1\n");continue;}int sum=1,i;for(i=2;i<=n;++i){if(i*i>n){sum*=9;break;}int x=0;while(n%i==0){++x;	n/=i;}if(x>0)sum*=((x+1)*(x+1)*(x+2)*(x+2)/4);}printf("%d\n",sum);}return 0;	
}