#include<stdio.h>
#include<string.h>
bool mark[1001];
int size1;
int prime[1000];
void init()
{
size1 = 0;
for (int i = 0; i <= 1000; i++)
mark[i] = false;
for (int i = 2; i <= 1000; i++)
{
if (mark[i] == true)
continue;
prime[size1++] = i;
for (int j = i * i; j <= 1000; j += i)
mark[j] = true;
}
}
int cnt1[1000];
int cnt2[1000];
int main()
{
int n, a;
init();
while (scanf("%d%d", &n, &a) != EOF)
{
int i;
for (i = 0; i < size1; i++)
{
cnt1[i] = cnt2[i] = 0;
}
for (i = 0; i < size1; i++)
{
int t = n;
while (t != 0)
{
cnt1[i] += t / prime[i];
t = t / prime[i];
}
}
int ans = 1000;
for (i = 0; i < size1; i++)
{
while (a%prime[i] == 0)
{
cnt2[i]++;
a = a / prime[i];
}
if (cnt2[i] == 0)
continue;
if (cnt1[i] / cnt2[i] < ans)
ans = cnt1[i] / cnt2[i];
}
printf("%d\n", ans);
}
return 0;
}
给定n,a求最大的k,使n!(阶乘)可以被a^k整除但不能被a^(k+1)整除
最新推荐文章于 2023-03-14 19:42:26 发布