时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
猫猫发现了一个数列 a1=p,a2=q,an=an−2an−1(n≥3)a_1 = p,a_2 = q,a_n = a_{n-2}^{a_{n-1}}(n\ge 3)a1=p,a2=q,an=an−2an−1(n≥3).
为了防止数据溢出,猫猫想让你找到最大的正整数 n,an≤Mn,a_n\le Mn,an≤M, 其中 M=1018M = 10^{18}M=1018。可以证明一定有解。
输入描述:
一行,两个正整数 p,q。 2≤p,q≤1e9
输出描述:
一行,一个整数,表示答案。
示例1
输入:
2 2
输出:
5
示例2
输入:
999999998 2
输出:
3
示例3
输入:
10 18
输出:
3
代码献上(比赛时卡了很多人包括我但很简单--数据范围)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long p, q;
cin >> p >> q;
//输入
int num = 2;
//储存n值
while (pow(p, q) <= 1e18)
//判断是否超过范围
{
long long x = pow(p, q);
//保存下一个n的值
p = q;
q = x;
//对n前两个数进行更新
num++;
//n值储存
}
cout << num;
//当时做题时对1e8进行储存用了
//const int N-=1e18;
//导致int储存上限未到达1e18
//是对此写习惯了故不假思索
//我反思希望广大网友引以为戒🤣🐶🐶🐶
return 0;
}