链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
猫猫发现了一个数列 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,qp,qp,q。 2≤p,q≤1092\le p,q\leq 10^{9}2≤p,q≤109.
输出描述:
一行,一个整数,表示答案。
示例1
输入
2 2
输出
5
示例2
输入
999999998 2
输出
3
示例3
输入
10 18
输出
3
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll p,q,n=0,cnt=1;
cin>>p>>q;
do
{
n=pow(p,q);
p=q;
q=n;
cnt++;
}while(n>0);
cout<<cnt;
return 0;
}
思路:找出数列的规律,通过循环实现
重点:long long的最大值为10^18数量级,当数据溢出时,n变成负数;故为了防止数据溢出,需设置n>0为条件。