『浅讲一下』Pell数列

本文介绍Pell数列,这是一个数列,前几项为1, 2, 5, 12...。题目要求求解数列的第n项,n不超过1000。解题关键在于发现递推关系a[n] = a[n-1] * 2 + a[n - 2],并使用高精度处理大数值。文章提供了思路和代码实现。" 107361798,8765276,Python生成器:从基础到实践,"['Python', '编程语言', '数据处理', '内存效率', '生成器']
部署运行你感兴趣的模型镜像

 

题目描述

有一种数列,它的前十项分别为:1 2 5 12 29 70 169 408 985 2378,这个数列被称为Pell数列,请问该数列的第n项的值是多少?(n <= 1000)

输入

一个整数n

输出

第n项的值

样例输入

10

样例输出

2378

这道题是一个非常经典的题目,主要考察两点递推高精度

先找规律罢!

显而易见,这道题的规律就是 a[n] = a[n-1] * 2 + a[n - 2]

但是,我们可以在题目上看到,这个数列的值增长的很快,所以必须要用高精度

高精度会吧,找规律会吧,递推会吧,输入输出会吧,把它们加在一起,会吧,这样,你就完成了你的 *史诗巨作* 代码。

看看代码

#include <bits/stdc++.h> //万能头文件
using namespace std;
int al[1005] , bl[1005] , cl[1005];

void rubbish(){ //初始化三个数组的垃圾桶
	for(int i = 0 ; i < 520 ; i ++){
		cl[i] = {0};
		bl[i] = {0};
		al[i] = {0};
	}
}

string pl(string a ,string b){ //高精度加法
	
	//al[520] = { }; bl[520] = { }; cl[520] = { };
	
	int len = max(a.length() , b.length());
	
	
	for(int i = a.length() - 1 , j = 1 ; i >= 0 ; i --, j ++){
		al[j] = a[i] - '0';
	}
	for(int i = b.length() - 1 , j = 1 ; i >= 0 ; i --, j ++){
		bl[j] = b[i] - '0';
	}
	
	for(int i = 1 ; i <= len ; i ++){
		cl[i] += al[i] + bl[i];
		cl[i + 1] = cl[i] / 10;
		cl[i] %= 10;
	}
	if(cl[len + 1]){
		len ++;
	}
	
	string ans;
	string str;
	for(int i = len ; i >= 1 ; i --){
		//str = to_string(cl[i]);
		//ans.append(str);
		ans += cl[i] + '0';
		//cout << cl[i];
	}
	
	rubbish();//浅浅的扔一下垃圾
	
	return ans;
}

int pell(int n){ //Pell数列的函数
	if(n == 1){
		cout << 1 <<endl;
	}
	if(n == 2){
		cout << 2 <<endl;
	}
	string a = "1" , b = "2" , c = "0" , h = "0";
	for(int i = 0 ; i < n - 2 ; i ++){
		h = pl(b , b); //b*2 可以转换成 2 个 b 相加
		c = pl(h , a);
		a = b;
		b = c;
	}
	cout << b <<endl;
}

int main()
{
	int p;
	cin >> p; //输入

	pell(p);

	//cout << pl("12","12") <<" "<< pl("24","5")<<endl;
	//cout << pl("1","2") <<" "<<pl("5","9")<<endl;

	return 0;
}

/*
in
10

out
2378
*/
当然,这个代码肯定还能优化辣!

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值