猫猫与数列(while循环求数列)

时间限制: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值