vijos - P1543极值问题(斐波那契数列 + 公式推导 + python)

这是一篇关于利用斐波那契数列解决数学问题的文章,具体是寻找满足特定条件的整数m和n,使得m^2+n^2的值最大。题目来源于汕头市FXOI组,给出了输入输出格式和样例,并提示可以通过斐波那契数列的递推公式来求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P1543极值问题
标签: [显示标签]

背景

小铭的数学之旅2。

描述

已知m、n为整数,且满足下列两个条件:
① m、n∈1,2,…,K
② (n^ 2-mn-m^2)^2=1
编一程序,对给定K,求一组满足上述两个条件的m、n,并且使m^2+n^2的值最大。例如,若K=1995,则m=987,n=1597,则m、n满足条件,且可使m^2+n^2的值最大。

格式

输入格式

输入仅一行,K的值。

输出格式

输出仅一行,m^2+n^2的值。

样例1

样例输入1[复制]

1995

样例输出1[复制]

3524578

限制

每个测试点1秒。

提示

Source:
汕头市FXOI组
Phoeagon
ThanX2 Sivon
For TripleY

对于这道题目首先我们得找到项与列的关系

于是可以得到a[i]  = 3 * a[i - 1] - a[i - 2]{其中i表示的是斐波那契数列的项数}

如此就可以解决问题了


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

k = int(raw_input())
a = 1
b = 1
ans = 2
cnt = 2
if k == 1:
    print 2
elif k == 2:
    print 5
else:
    while True:
        if ans > k:break
        t = a
        a = a + b
        b = t
        ans += a
        cnt += 1
    c = 1
    d = 1
    for i in range(cnt):
        t = c
        c = c * 3 - d
        d = t
    print c

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值