原生代码来自:http://blog.csdn.net/qq_34594236/article/details/52123798。
我自己略加修改,添加注释,更容易理解
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
int num; // 输入的数
int start, end; // 序列起始位置
int len = 0; // 因子序列长度初始为 0
cin >> num;
// 起始因子从2开始,到sqrt(num)结束,题目指明1不算在内
// 因为因子序列是连续的,所以后面的因子必然比前面的大,
// 所以起始因子可以最大可以到sqrt(num)
start = 2;
for (int i = start; i <= sqrt(num); i++)
{
// 因为因子序列中的每个数都是num的因子,所以先判断是否是num的因子
if (num % i == 0)
{
int temp = num / i; // 求出与 i 对应的另一个因子
// 确定结束因子
for (end = i + 1; end <= sqrt(num) + 1; end++)
{
// 同理,也要判断 j 是否是 temp 的因子
if (temp % end == 0)
{
// 如果end是因子,则j递增,继续判断
temp /= end;
} else {
// end不是因子,退出循环
break;
}
} //