• 约数的个数


    约数的个数

    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;
    }
    
    
  • 相关阅读:
    RPC学习
    json
    jsf
    ajax分析
    async分析
    web后台
    servlet和CGI区别(转)
    forward和redirect
    (转)jvm
    Async分析
  • 原文地址:https://www.cnblogs.com/yu0111/p/4792812.html
Copyright © 2020-2023  润新知