题目56 阶乘因式分解(一)

阶乘因式分解(一)

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
 
描述

给定两个数m,n,其中m是一个素数。

将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。

 
输入
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出
输出m的个数。
样例输入
2
100 5
16 2
样例输出
24
15
解题:这道题主要是减少算法的时间复杂度,用数学方法解决。如果球出阶乘再做因式分解,一定会超时,而且工作量大,不可取。现在有一种方法
可以解决这一问题。将m除以n的值保留然后再让该值除以n如此往复,并将每次求得的值相加就得到想要的结果。南工上还有一道题与此类似,唉!忘了……
#include<stdio.h>
int main()
{
    int N,m,n,sum;
    scanf("%d",&N);
    while(N--)
    {
       sum = 0;
       scanf("%d%d",&m,&n);
       while(m)
       {
           sum = sum + m/n;
           m = m/n;
       }
       printf("%d\n",sum);
    }
   
    return 0;
}
posted @ 2012-05-02 21:01  牧童不吃蛋炒饭  阅读(336)  评论(0)    收藏  举报