版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
没有另一种选择,你所现有的选择都是对的,他就像人的感情一样,无需去假设,
因为无论怎么去假设,那假设都不会成立。——山本文绪《蓝另一种蓝》
题目描述
因子个数 | 时间限制:1秒 | 内存限制:32768K
一个正整数可以分解成一个或多个数组的积。例如36 = 2 * 2 * 3 * 3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。
输入描述
输入包括多组数据。
每组数据仅有一个整数n(2≤n≤100000)。
输出描述
对应每个整数,输出其因子个数,每个结果占一行。
示例
输入
30
26
20
输出
3
2
2
题目解析
求一个数字的因子( >= 2的最小不能整除数字)个数;
解题思路
从最小因子2到数字的最大因子数(数字的平方根)开始判断是否能够取余可以则循环取余直到取余不为0,因子个数 + 1;否则使用下一个因子计算;最终整除了各个因子数之后剩余的数字不为1则本身也是一个因子,因此因子数 + 1
示例代码
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int n, k, i;
while (cin >> n){
k = 0;
for (i = 2; i <= sqrt(n); i++) {
if ((n % i) == 0) {
while ((n % i) == 0){
n = n / i;
}
k++;
}
}
if (n != 1)
k++;
cout << k << endl;
}
return 0;
}