难题,大佬的思路摸索半天,学会了质因子分解思想,包括阶乘的质因子分解和一般数的质因子分解(这个好像之前写过类似的???)
大佬思路
ti
#include<bits/stdc++.h>
using namespace std;
#define MAX 1005
#define int long long
int a, n;
int isprime[MAX], primes[MAX];
int cnt;
signed main()
{
memset(isprime, 1, sizeof isprime);
for(int i = 2; i < MAX; i ++ ){
if(isprime[i]){
primes[cnt ++ ] = i;
for(int j = i * 2; j < MAX; j += i){
isprime[j] = 0;
}
}
}
while(cin>>n>>a){
map<int, int>mn, ma;
for(int i = 0; i < cnt && primes[i] <= n; i ++ ){
int t = n, base = primes[i];
while(t / base > 0){
mn[primes[i]] += t / base;
base *= primes[i];
}
}
for(int i = 0; i < cnt && primes[i] <= a; i ++ ){
while(a % primes[i] == 0){
ma[primes[i]] ++ ;
a /= primes[i];
}
}
int ans = MAX;
for(auto it = ma.begin(); it != ma.end(); it ++ ){
int k = (*it).first, num = (*it).second;
if(num > mn[k]){
ans = 0;
break;
}
ans = min(ans, mn[k] / num);
}
cout<<ans<<endl;
}
return 0;
}