E.rin和快速迭代(约数,模拟)
rin和快速迭代
http://www.nowcoder.com/questionTerminal/a797241b43f34ed4a9ef6018747c30b1
(牛客第一场)E.rin和快速迭代
设为
的因子个数,将
迭代下去,任意正整数都会变成2。
对于一个比较大的数而言,它的因子数,通常远远小于这个数本身,所以暴力求解时间复杂度也不高,迭代几次往往就能求出答案。
#include <iostream> #include <cmath> using namespace std; // 正整数n的因子个数 long long num(long long n){ long long count=2; //大于1的每个数都有两个因子 for(long long i=2;i<=sqrt(n);i++){ if(n%i==0){ if(i==sqrt(n) && n/i==i){ //因子为元素开平方时,+1 count++; } else count+=2; //否则加2 } } return count; } int main(){ long long n; cin>>n; long long cnt=1; n=num(n); while(n!=2){ //不断循环迭代,直到n等于2 cnt++; //计数 n=num(n); } cout<<cnt<<endl; return 0; }