luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)

题意

已知x,y为整数,且满足以下两个条件:

1.x,y∈[1…k],且x,y,k∈Z

2.(x^2-xy-y^2)^2=1

给你一个整数k,求一组满足上述条件的x,y并且使得x^2+y^2的值最大。

k<=1018

题解

这题需要推式子

(x2-xy-y2)2=1

(y2+xy-x2)2=1

[(x+y)2-xy-2x2)]2=1

[(x+y)2-(x+y)x-x2)]2=1

然后因为斐波那契数列有一个性质:

把f[n+1]变成f[n]+f[n-1]这个式子就变成了:

f[n]2-f[n]f[n-1]-f[n-1]2=(-1)n-1

发现这两个式子很像

仔细观察我们发现,当x+y=f[n],x=f[n-1]时式子成立

令x1=x+y;y1=x;

(x12-x1y1-y12)2=1即当x1=f[n],y1=f[n-1]时式子成立

我们要求x2+y2的最大值。

就是求f[n]2+f[n-1]2的最大值。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 unsigned long long n,f[2000000];
 8 int now;
 9 int main(){
10     scanf("%llu",&n);
11     now=2; 
12     f[0]=0;f[1]=1;f[2]=1;
13     while(n>=f[now]){
14         now++;
15         f[now]=f[now-1]+f[now-2];
16     }
17     printf("%llu %llu",f[now-1],f[now-2]);
18     return 0; 
19 }

 

转载于:https://www.cnblogs.com/Xu-daxia/p/9563991.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值