猫猫发现了一个数列 a1=p,a2=q,an=(an−2)an-1 (n-1为下标)(n≥3).
为了防止数据溢出,猫猫想让你找到最大的正整数 n,an≤M, 其中 M=1018。可以证明一定有解。
输入描述:
一行,两个正整数 p,q。 2≤ p,q ≤109。
输出描述:
一行,一个整数,表示答案。
示例1:
输入
2 2
输出
5
示例2:
输入
999999998 2
输出
3
示例3:
输入
10 18
输出
3
代码详情
#include<iostream>
#include<math.h>
using namespace std;
int main(){
long long M=0,a,b,c=2;
cin>>a>>b;
M=pow(a,b);
/*利用整形溢出的特性:溢出后数值变为负数*/
while(M>=0){
c++;
//接力计算下个数列元素
a=b;
b=M;
M=pow(a,b);
}
cout<<c;
return 0;
}
注:并不是所有时候整型溢出都是负数,具体的实现以编译器为准。
详情可以参考网上的其他文章