阶乘因式分解(一)
难度:2
描述:
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
输入:
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出:
输出m的个数。
样例输入:
2
100 5
16 2
样例输出:
24
15
-------------------------------------------------------------分界线------------------------------------------------------------------------
思路分析:
1)题目要求将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个素数m(ps:一看到阶乘还是最多10000的阶乘,我就绝望的一批,最后我想了下,数据量太大了,可否有其他的方法?)
2)所谓分解质因数就是指把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。举个例子,56的分解质因数是2*2*2*7,注意只有合数才可以分解质因数,合数就是与素数相对的,除了1和其本身能整除外,还能被其他数整除。
3(好了,不扯这些概念性的问题了,emmmmm,在网上看到很多种解决办法,这种办法是我觉得最容易理解的办法)假设有100个数,5的倍数有5,10,15,20.....95,100共有20个,这20个数又有4个5的倍数,而剩下的4个就没有其他5的倍数了。所以可以通过以下代码实现整个程序。
--------------------------------------------------------------还是分界线--------------------------------------------------------------------
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int s,n,m; 6 cin>>s; 7 while(s--) 8 { 9 cin>>n>>m; 10 int sum=0; 11 while(n) 12 { 13 sum+=n/m; 14 n=n/m; 15 } 16 cout<<sum<<endl; 17 } 18 return 0; 19 }
好了,很简单吧~