约数的个数

约数的个数

Description

mmoaay小侄子今年上初中,老师出了一道求约数个数的题目,比如8的约数有1,2,4,8共4个。

当数比较小的时候可以人工算,当n较大时就难了。

mmoaay嫌麻烦,现在让你编个程序来算。

Input

一行一个整数。最后以0结束。

Output

分别求出这些整数的约数个数,最后的0不用处理。

Sample Input

8
100
0

Sample Output

4
9


题解:求正整数378000共有多少个正约数?
解:将378000分解质因数378000=2^4×3^3×5^3×7^1
由约数个数定理可知378000共有正约数(4+1)×(3+1)×(3+1)×(1+1)=160个。
#include <stdio.h>
#include <math.h>
#define N 70000
#define LL long long
bool prime[N];
int a[N];
void Prim()
{
    int i, j;
    for(i = 2; i < N; i++)
    {
        if(i % 2)
            prime[i] = false;
        else
            prime[i] = true;
    }
    for(i = 3; i <= sqrt(N); i += 2)
        if(prime[i])
            for(j = i + i; j < N; j += i)
                prime[j] = false;
    j = 1;
    a[0]=2;
    for(i = 2; i < N; i++)
        if(!prime[i])
            a[j++] = i;
}
int main()
{
    LL t;
    Prim();
    while(scanf("%lld",&t),t)
    {
        LL s=1,i;
        for(i=0;;i++)
        {
            if(t==1)
                break;
            LL num=1;
            while(t%a[i]==0)
            {
                num++;
                t/=a[i];
            }
            s*=num;
        }
        printf("%lld
",s);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/yu0111/p/4792812.html