定理:一个正整数 n 可以用素因子唯一表示为 p1^r1 * p2^r2 * ... pk^rk (其中 pi 为素数) , 那么这个数的因子的个数就是,(r1+1)*(r2+1)*...*(rk+1).
理解:为什么是加1之后再相乘,因为一个数的的因子数至少为1和他自身,但因为r1,r2。。可以为0,所以因子的个数为(r1+1)。。。
拓展一下:
定理1: 一个正整数 n 可以用素因子唯一表示为 p1^r1 * p2^r2 * ... pk^rk (其中 pi 为素数) , 那么这个数的因子的个数就是,(r1+1)*(r2+1)~(rk+1).
定理2:如果一个数字 n = p1^r1 * p2^r2 * ... pk^rk ,那么 n*n = p1^r1 * p2^r2 * ... pk^rk * p1^r1 * p2^r2 * ... pk^rk ,它的因子的个数就是 (2*r1+1)*(2*r2+1)~(2*rk+1)
Humble Numbers只要2,3,5,7,因此只要统计这四个因子的数目就可以了!
#include
int main()
{
__int64 n, c2, c3, c5, c7;
while(scanf("%I64d", &n), n){
c2 = c3 = c5 =c7 = 1;
while(n%7 == 0){
c7++;
n/=7;
}
while(n%5==0){
c5++;
n/=5;
}
while(n%3==0){
c3 ++;
n /= 3;
}
while(n%2 == 0){
c2 ++;
n /= 2;
}
__int64 ans =c2*c3*c5*c7;
printf("%I64d\n", ans);
}
}