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;
    }
    欢迎转载,转载请注明出处!
  • 相关阅读:
    创建表头固定,表体可滚动的GridView(转)
    正则表达式实现资料验证的技术总结 (转)
    通过样式表实现固定表头和列 (转)
    如何把string解析为int?(转)
    代码设计简单规范 (转)
    取存储过程结果集
    JS对select动态添加options操作[IE&FireFox兼容]
    多UpdatePanel
    ASP.NET页面如何引发PostBack事件 转
    asp.net 页面回传
  • 原文地址:https://www.cnblogs.com/huihao/p/7636068.html
Copyright © 2011-2022 走看看