题目描述
”数论真的太好玩了喵~“——hoshizora rin
rin最近喜欢上了数论。
然而数论实在太复杂了,她只能研究一些简单的问题。
这天,她在研究正整数因子个数的时候,想到了一个“快速迭代”算法。设
为
的因子个数,将
迭代下去,rin猜想任意正整数最终都会变成
。
例如: 。
她希望你帮她验证一下。她会给你一个正整数
,让你输出它在迭代过程中,第一次迭代成
的迭代次数。
输入描述:
一个正整数
输出描述:
一个正整数,为 迭代至 的次数。
输入
12
输出
4
说明
12的因子:1,2,3,4,6,12。共6个。
6的因子:1,2,3,6。共4个。
4的因子:1,2,4。共3个。
3的因子:1,3。共2个。
12 → 6 → 4 → 3 → 2 , 故迭代了4次。
题解
- 只要会 复杂度处理每一次迭代就行。是一道披着假数论的
AC-Code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll num(ll n) { //返回的是因子总数
ll count = 2;
for (ll i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
if (i == sqrt(n) && n / i == i) //如果两因子相同,则只加1
count++;
else
count += 2;
}
}
return count;
}
int main(){
ll n;
while(cin >> n){
ll cnt = 0;
while(n > 2 || cnt == 0){
n = num(n);
++cnt;
}
cout << cnt << endl;
}
}