zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    WinForm微信扫码登录
    php字符串只替换一次
    laravel6 文档
    MYSQL批量修改
    semanage command not found
    SUID、SGID、SBIT
    passwd命令
    redhat配置yum软件仓库
    mount: no medium found on /dev/sr0 找不到介质
    CentOS7 防火墙(firewall)的操作命令
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/9563991.html
Copyright © 2011-2022 走看看