当前位置: 代码迷 >> 综合 >> 【Codeforces Round #538 (Div. 2) C. Trailing Loves (or L'oeufs?)】 分解质因数
  详细解决方案

【Codeforces Round #538 (Div. 2) C. Trailing Loves (or L'oeufs?)】 分解质因数

热度:40   发布时间:2023-12-29 02:08:16.0

C. Trailing Loves (or L’oeufs?)

题意

n!n!n!在b进制下末尾有多少个000
1≤10≤1018,2≤b≤10121 \leq 10 \leq 10^{18},2 \leq b \leq 10^{12}1101018,2b1012

做法

这道题我们首先考虑101010进制,那就是看n!n!n!能够整除555多少次和整除222多少次。取个minminmin即是答案,这道题做法类似,我们只需要先对bbb进行分解质因数,对每个质因数统计在bbb中出现次数cntcntcnt和在n!n!n中出现次数mmm,最后对所有的m/cntm/cntm/cntminminmin即可

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
ll solve(ll a,ll b)
{
    if(a==0) return 0;return a/b+solve(a/b,b);
}
int main()
{
    ll a,b;scanf("%lld%lld",&a,&b);ll ans=LL_INF;for(ll i=2;i*i<=b;i++){
    if(b%i==0){
    int cnt=0;while(b%i==0){
    cnt++;b/=i;}ans=min(ans,solve(a,i)/cnt);}}if(b>1)  ans=min(ans,solve(a,b));printf("%lld\n",ans);return 0;
}
  相关解决方案