题目
一个只有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个不起眼的数字。
第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个因数。
例如,4是一个不起眼的,它有3个因数(1,2,4);12有6个因数。
我的想法:分别算出来一个数是2,3,5,7的几次方,再将次数相乘,然后发现结果不对,好像只有一个质因子的时候这么干不行,因为只有一个你没法和人家匹配啊,于是我就把只有一个质因子的情况单独讨论,结果还是不对,好像还落了这个数本身(不和其他数匹配的情况)于是又把每个质因子的次数再加在一起,最后再加一(本身1就是一个因子),结果都对,可是还是wa……..,真烦人。
实际答案还是先算出来
一个数是2,3,5,7的几次方,但要将他们的次数分别加一再相乘(即把0次方也算在里面),这样就可以避免只有一个质因子时要单独算的情况,也不用最后再加一了。
一个数是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]);
}
今天的文章求质因子算法_一个数的因子怎么算分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86978.html