/*
前提:1 2...n 能被m整除的数有n/m
1*2*3*...n的阶乘一定有k=n/m个m
而且这k个m一定来自
1m 2m ....km(因为m是素数所以不会有两个数相乘后产生m的情况)也就是这些数相乘(1m*2m*3m*...km)有多少个m
我们知道有k个m,所以相乘是就不用把这些m乘进去(即我们算1m*2m*3m....*km==(1*2*3...*k)*(m^k)
时算(1*2*3...*k)有多少个m再加上k=n/m就可以了)
而1*2*3...*k含有多少个m就又转化成了上面的问题
*/
#include<stdio.h>
int main()
{
int t,m,n,sum;
scanf("%d",&t);
while(t--)
{
sum = 0;
scanf("%d%d",&m,&n);
while(m>0)
{
sum = sum + m/n;
m = m/n;
}
printf("%d\n",sum);
}
return 0;
}
前提:1 2...n 能被m整除的数有n/m
1*2*3*...n的阶乘一定有k=n/m个m
而且这k个m一定来自
1m 2m ....km(因为m是素数所以不会有两个数相乘后产生m的情况)也就是这些数相乘(1m*2m*3m*...km)有多少个m
我们知道有k个m,所以相乘是就不用把这些m乘进去(即我们算1m*2m*3m....*km==(1*2*3...*k)*(m^k)
时算(1*2*3...*k)有多少个m再加上k=n/m就可以了)
而1*2*3...*k含有多少个m就又转化成了上面的问题
*/
#include<stdio.h>
int main()
{
int t,m,n,sum;
scanf("%d",&t);
while(t--)
{
sum = 0;
scanf("%d%d",&m,&n);
while(m>0)
{
sum = sum + m/n;
m = m/n;
}
printf("%d\n",sum);
}
return 0;
}