題目鏈接:here~~
牛人的解釋
可以想象,n的階乘因子從1開始到n,階乘因式分解第一個可以出現m的是m那一項,接着必定是2m那一項,接着是3m、4m..pm..km<=n,(k+1)m>=n.則首先可以判斷裏面出現了k個質因子m, 但是中間的一項pm中p可能等於m,也可能等於m*m,m*m*m等,所以n/m同時也表示最後一個含有質因子m且小於n的最大的階乘因子,也就是上面的k,所以k/m得到的就是k裏面還有多少個m,然後再除以m,以此類推,則可以把上面每一項pm裏面p的m質因子給求出來,每一次求過之後都加到一塊則是n!中的m因子個數。
#include <iostream>
using namespace std;
int main()
{
int N, n, m, ans;
cin>>N;
while (N--)
{
cin>>n>>m;
ans=0;
while (n>=m)
{
ans+=n/m;
n/=m;
}
cout<<ans<<endl;
}
return 0;
}