一、题目大意
二、解题思路
以a
的所有素因数为基础分解n!
和a
, 以其指数判断是否能够整除。
判断n!
的素因数p
的指数时,不断加上n/p
. 具体见代码。
三、代码
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 100000;
int is_prime[MAX];
int primes[MAX];
int ans_primes[MAX];
int n_to_pri_num[MAX];
int a_to_pri_num[MAX];
int cnt;
void get_primes()
{
memset(is_prime, -1, sizeof(is_prime));
cnt = 0;
is_prime[0] = is_prime[1] = 0;
for(int i=2; i<MAX; i++)
{
if(is_prime[i] == 0)
continue;
primes[cnt++] = i;
for(int j=2*i; j<MAX; j+=i)
is_prime[j] = 0;
}
}
int main()
{
int n, a;
cin >> n >> a;
int ans_pri_size = 0;
get_primes();
for(int i=0; i<cnt; i++)
{
if(a % primes[i] == 0)
{
ans_primes[ans_pri_size] = primes[i];
a_to_pri_num[ans_pri_size] = 0;
int temp = primes[i];
while(a % temp == 0)
{
a_to_pri_num[ans_pri_size]++;
a /= temp;
}
ans_pri_size++;
}
if(a == 1)
break;
}
for(int i=0; i<ans_pri_size; i++)
{
int temp = n;
while(temp)
{
n_to_pri_num[i] += temp / ans_primes[i];
temp /= ans_primes[i];
}
}
int ans = 10000;
for(int i=0; i<ans_pri_size; i++)
{
ans = min(n_to_pri_num[i] / a_to_pri_num[i], ans);
}
cout << ans << endl;
return 0;
}