Wannafly挑战赛25 A 因子(快速求n!中有多少个m的乘积)

题意:给你一个n,和p让你求n中含有x个p,打印x

思路:(秦皇岛真的打自闭了啊,后来听铁哥们说了I感觉能暴力,但想的不是很清楚)还是说正题啵,这个题有点意思骂我们先思考一个n的阶乘对于一个质数p的做法,我觉得纸片博客讲的还是挺清楚的,其实只用你自己稍微推一下就行了(传送门),然后这个题我们发现他并没有说是质数,那我们就手动质因数分解,然后就最小值就行了

代码:

#include <bits/stdc++.h>
using namespace std;
 
typedef long long LL;
 
map<LL,LL>mp;
LL solve(LL n,LL p)
{
    LL ans=0;
    while(n)
    {
        n=n/p;
        ans+=n;
    }
    return ans;
}
int main()
{
    LL n,p;
    scanf("%lld%lld",&n,&p);
    LL as=p;
    LL j=2;
    while(as!=1){
        while(as%j==0){
            as/=j;
           mp[j]++;
        }
        j++;
    }
    LL ans=0x3f3f3f3f3f3f3f3fLL;
    for(auto i:mp){
//        printf("%d %d\n",i.first,i.second);
        ans=min(ans,solve(n,i.first)/(i.second));
    }
    printf("%lld\n",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lalalatianlalu/p/9722465.html
今日推荐