阶乘因式分解(一)
时间限制: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
#include <stdio.h>
int main ()
{
int s, n, m, a, i, sum;
scanf ("%d", &s);
while (s--)
{
a = 0;
scanf ("%d%d", &n, &m);
n = n + 1; //这加一为了抵消后头的n--
while (n--)
{
if (n == 0)
break; //若不将n==0排除,则在最后的时候,将会陷入死循环。
sum = n;
while (1)
{
if (sum % m == 0)
{
a = a + 1;
sum = sum / m; //求出个数。
}
else
break;
}
}
printf ("%d\n", a);
}
return 0;
}
怎么说呢,自己感觉很满足,但知道,是很菜的代码。
错误一:
刚开始傻傻的去求100!,最后发现表示不了,苦苦思索才想到分不求。
错误二:
break的跳出,已经分清了,但一次的错误让自己一直对break有怀疑。
错误三:
没设置if n==0;若不设置的话最后没结果,自己一步步拆分,发现到n==0后就一直自己循环下去了,无穷尽。
优秀代码
#include<stdio.h>
int main()
{
int n;
int a, b;
int t;
scanf("%d", &n);
while (n--)
{
t = 0;
scanf("%d %d", &a, &b);
while (a >= b)
{
t += a / b;
a = a / b;
}
printf("%d\n", t);
}
return 0;
}
一个轻松的两个式子表示了自己的好多行自己苦苦思索不出来。搞不清楚是因为计算机知识不够还是数学知识不够。
自己一个人走,在课闲的时候做一道水题而默默高兴,其他的人做了一二百道了,自己走的好慢,该不该找个人帮自己呢,无助。