题目
一个只有2、3、5或7的质数的数被称为一个不起眼的数。
第1、2、3、4、5、6、7、8、9、10、12、14、15、16、18、20、21、24、25、27、……
显示前20个不起眼的数字。
现在给出一个简单的数字,请编写一个程序来计算这个简单数字的因数个数。
例如,4是一个不起眼的,它有3个因数(1,2,4);12有6个因数。
我的想法:分别算出来一个数是2,3,5,7的几次方,再将次数相乘,然后发现结果不对,好像只有一个质因子的时候这么干不行,因为只有一个你没法和人家匹配啊,于是我就把只有一个质因子的情况单独讨论,结果还是不对,好像还落了这个数本身(不和其他数匹配的情况)于是又把每个质因子的次数再加在一起,最后再加一(本身1就是一个因子),结果都对,可是还是wa........,真烦人。
实际答案还是先算出来
一个数是2,3,5,7的几次方,但要将他们的次数分别加一再相乘(即把0次方也算在里面),这样就可以避免只有一个质因子时要单独算的情况,也不用最后再加一了。
主要代码如下
while (scanf("%I64d", &n), n)
{
Int num[4] = {2, 3, 5, 7};
int ans[4] = {1, 1, 1, 1};//由在算的时候没有把0个2,0个3,0个5或者0个7的情况计算进去,所以一开始就加上
for (int i = 0; i < n; i++)
{
while (n != 1 && n % num[i] == 0)//算出2,3,5,7的个数
{
ans[i]++;
n /= num[i];
}
}
printf("%d\n", ans[0] * ans[1] * ans[2] * ans[3]);
}