C/C++_2019_8_3(因子个数 )

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44770155/article/details/100586596

没有另一种选择,你所现有的选择都是对的,他就像人的感情一样,无需去假设,
因为无论怎么去假设,那假设都不会成立。——山本文绪《蓝另一种蓝》

题目描述

因子个数 | 时间限制: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;
}

猜你喜欢

转载自blog.csdn.net/qq_44770155/article/details/100586596