1. 程式人生 > >vijos - P1543極值問題(斐波那契數列 + 公式推導 + python)

vijos - P1543極值問題(斐波那契數列 + 公式推導 + python)

找到 span add gin python3 abi pri n) fill

P1543極值問題 Accepted 標簽:[顯示標簽]

背景

小銘的數學之旅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

        


vijos - P1543極值問題(斐波那契數列 + 公式推導 + python)