階乘質因數分解
阿新 • • 發佈:2019-02-07
24 15 83333329
- #include<stdio.h>
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- int m,n;
- scanf("%d%d",&m,&n);
- long int sum=0;
- while(1)
- {
- sum+=m/n;
- m=m/n;
- if(m==0)
- break;
- }
- printf("%d\n",sum);
- }
- }
給定兩個數m,n
求m!分解質因數後因子n的個數。
這道題涉及到了大數問題,如果相乘直接求的話會超出資料型別的範圍。
下面給出一種效率比較高的演算法,我們一步一步來。
m!=1*2*3*……*(m-2)*(m-1)*m
可以表示成所有和n倍數有關的乘積再乘以其他和n沒有關係的
=(n*2n*3n*......*kn)*ohter other是不含n因子的數的乘積 因為 kn<=m 而k肯定是最大值 所以k=m/n
=n^k*(1*2*......*k)*other
=n^k*k!*other
從這個表示式中可以提取出k個n,然後按照相同的方法迴圈下去可以求出k!中因子n的個數。
每次求出n的個數的和就是m!中因子n的總個數。