zoukankan      html  css  js  c++  java
  • UVA10780幂和阶乘

    题意:
          输入两个整数n,m(1<m<5000,0<n<10000)求最小的k使得m^k是n!的因子。


    思路:
         比较容易想,一开始手残wa了好几次,我们直接求出m和n!的素数因子和个数就行了,假如s1[a]表示的是n!的素数因子a的个数,s2是m的,则Ans=min(Ans ,s1[a]/s2[a]);这个应该不用解释,很好理解吧!




    #include<stdio.h>
    #include<string.h>


    int Pri[11000] ,pt;
    int mark[11000];
    int s1[11000] ,s2[11000];


    void DBPri()
    {
        memset(mark ,0 ,sizeof(mark));
        mark[1] = 1;
        pt = 0;
        for(int i = 2 ;i <= 10000 ;i ++)
        {
            if(!mark[i])
            {
                Pri[++pt] = i;
                for(int j = i + i ;j <= 10000 ;j += i)
                mark[j] = 1;
            }
        }
    }


    int main ()
    {
        DBPri();
        int t ,cas = 1 ,i ,j ,n ,m;
        scanf("%d" ,&t);
        while(t--)
        {
            scanf("%d %d" ,&m ,&n);
            memset(s1 ,0 ,sizeof(s1));
            for(i = 1 ;i <= n ;i ++)
            {
                int now = i;
                for(j = 1 ;Pri[j] <= now && j <= pt ;j ++)
                {
                    while(now % Pri[j] == 0)
                    {
                        now /= Pri[j];
                        s1[Pri[j]] ++;
                    }
                }
            }




            memset(s2 ,0 ,sizeof(s2));
            int mm = m;
            for(i = 1 ;Pri[i] <= mm && i <= pt ;i ++)
            if(mm % Pri[i] == 0)
            {
                while(mm % Pri[i] == 0)
                {
                    s2[Pri[i]] ++;
                    mm /= Pri[i];
                }
            }
            int Ans = 100000;
            for(i = 1 ;Pri[i] <= m && i <= pt ;i ++)
            if(m % Pri[i] == 0)
            {
                if(Ans > s1[Pri[i]] / s2[Pri[i]])
                Ans = s1[Pri[i]] / s2[Pri[i]];
            }


            printf("Case %d: " ,cas ++);
            if(Ans == 0) printf("Impossible to divide ");
            else  printf("%d " ,Ans);
        }
        return 0;
    }











  • 相关阅读:
    learnyou 相关网站
    hdu 3038 How Many Answers Are Wrong
    hdu 3047 Zjnu Stadium 并查集高级应用
    poj 1703 Find them, Catch them
    poj 1182 食物链 (带关系的并查集)
    hdu 1233 还是畅通工程
    hdu 1325 Is It A Tree?
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    POJ – 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/csnd/p/12062598.html
Copyright © 2011-2022 走看看