NYOJ 階乘因式分解(二)南工70

題目鏈接: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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章