1. 题目来源
链接:因子个数
来源:牛客网
2. 题目说明
一个正整数可以分解成一个或多个数组的积。例如36=2 * 2 * 3 * 3 ,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。
输入描述:
输入包括多组数据。
每组数据仅有一个整数n (2≤n≤100000)。
输出描述:
对应每个整数,输出其因子个数,每个结果占一行。
示例:
输入
30
26
20
输出
3
2
2
3. 题目解析
求一个数字的因子(>=2的最小不能整除数字)个数。从最小因子2到数字的最大因子数(数字的平方根)开始判断是否能够取余,可以则循环取余直到取余不为0,因子个数+1,否则使用下一个因子计算。最终整除了各个因子数之后剩余的数字不为1则本身也是一个因子,因此因子数+1
4. 代码展示
// write your code here cpp
#include <bits/stdc++.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 /= i;
k++;
}
if(n != 1) // 素数情况
k++;
cout << k << endl;
}
return 0;
}