猫猫与数列

链接:登录—专业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为条件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值