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;
    }











  • 相关阅读:
    从新浪财经获取金融新闻类数据并进行打分计算
    SQL窗口函数的用法总结
    从新浪财经获取金融新闻类数据并保存到MySQL
    [ZJOI2015]幻想乡战略游戏
    二次剩余入门
    [多校赛20210406]迫害 DJ
    [NOI Online 2021 提高组] 愤怒的小N
    [NOI Online 2021 提高组] 岛屿探险
    「UNR #3」百鸽笼
    [ZJOI2019]开关
  • 原文地址:https://www.cnblogs.com/csnd/p/12062598.html
Copyright © 2011-2022 走看看