zoukankan      html  css  js  c++  java
  • 【洛谷P3927】SAC E#1

    题目背景

    数据已修改

    SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友。

    题目描述

    SOL君很喜欢阶乘。而SOL菌很喜欢研究进制。

    这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘。

    SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数。

    但是SOL菌太菜了于是请你帮忙。

    输入输出格式

    输入格式:

    每组输入仅包含一行:两个整数n,k。

    输出格式:

    输出一个整数:n!在k进制下后缀0的个数。

    输入输出样例

    输入样例#1:
    10 40
    输出样例#1:
    2

    说明

    对于20%的数据,n <= 1000000, k = 10

    对于另外20%的数据,n <= 20, k <= 36

    对于100%的数据,n <= 10^12,k <= 10^12

    update

    1.一组数据

    2.K不会==1

    3.现在std没有爆long long

    4.对数据有问题联系icy (建议大家不要面向数据编程)

    分析

    知识点:唯一分解定理。

    代码

    本题后来数据变小,就不用那啥定理了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    ll n,k;
    int main()
    {
        while(~scanf("%lld%lld",&n,&k))
        {
            register ll ans=0x7fffffffffffffffll,sum,cnt;
            for(register ll i=2;i*i<=k;++i)
            {
                if(k%i==0)
                {
                    sum=cnt=0;
                    while(k%i==0){k=k/i;++cnt;}
                    for(register ll j=i;j<=n;j*=i)
                    sum+=n/j;
                    ans=min(ans,sum/cnt);
                }
            }
            if(k>1)
            {
                sum=cnt=0;
                for(register ll i=k;i<=n;i*=k) sum+=n/i;
                ans=min(ans,sum);
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    欢迎转载,转载请注明出处!
  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/huihao/p/7636068.html
Copyright © 2011-2022 走看看