zoukankan      html  css  js  c++  java
  • Trailing Zeroes (I) LightOJ

    题意就是给你一个数让你找它的正因子个数(包括自身,不包括1),这个地方用到一个公式,如果不用的话按正常思路来写会TL什么的反正就是不容易写对。

    求任意一个大于1的整数的正因子个数

    首先任意一个数n,n=P1^a1 * P2^a2 * P3^a3 *……Pn^an;

    任意的整数n可以分解为m个素数ai次幂的连续乘机,这个地方解释不清自己再理解一下(Pi都为素数,依次往后pi越来越大,ai就是次幂,自己可以找几个任意整数n来套一下这个公式就会明白了)

    然后正因子个数和:sum=(1+a1)*(1+a2)*(1+a3)……*(1+an);

    用这两个公式本题就可以轻松解决啦(这里还是不清楚的就套几个数就理解这两个公式了,是完全正确的哦);

    AC代码如下:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int pri[1000001];
    int tt[1000001];
    int s=0;
    void dabiao() //打个素数表会节省很多时间
    {   int j;
        memset(tt,0,sizeof(tt));
        tt[1]=1;
        tt[0]=1;
        for(int i=2;i<=1000000;i++)
        {
            if(tt[i]!=1)
            {
                pri[s++]=i;
                for(j=i+i;j<=1000000;j+=i)
                    tt[j]=1;
            }
        }
        return ;
    }
    int main()
    {
        int m,i,j,k,t,cas=0;
        long long n,num,ans;
        scanf("%d",&t);
        dabiao();
        while(t--)
        {
            scanf("%lld",&n);
            num=1;
            for(i=0;i<s&&pri[i]*pri[i]<=n;i++)
            {
                ans=0;
                if(n%pri[i]==0)
                {
    
                    while(n%pri[i]==0)//此处就是来找素数的N次幂,存起来相乘来计算SUM
                    {
                        ans++;
                        n/=pri[i];
                    }
    
                }
            num=num*(ans+1);
            }
                if(n>1)//这个地方就不解释啦,自己想想咯
                num*=2;
            printf("Case %d: %lld
    ",++cas,num-1);
        }
        return 0;
    }
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/nr1999/p/8459934.html
Copyright © 2011-2022 走看看