zoukankan      html  css  js  c++  java
  • 数字

    给你一个斐波那契数列 F:
    F0=0,F1=1;
    Fn=Fn−1+Fn−2;
    给你一个数 k,可以从斐波那契数列中选取可以重复的 k 个数:Fa1,Fa2,
    Fa3....
    求最小的 N 使得,Fa1+Fa2+Fa3...+Fak 不能构成数字 N。

    k小于1e9

     1 #include <cstdio>
     2 using namespace std;
     3 typedef long long LL;
     4 
     5 const LL prime=998244353;
     6 LL n, t;
     7 LL a[2][2], tmp1[2][2], tmp2[2][2];
     8 
     9 void plus22(LL a[2][2], LL b[2][2]){
    10     tmp2[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
    11     tmp2[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1];
    12     tmp2[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
    13     tmp2[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
    14     a[0][0]=tmp2[0][0]%prime, a[0][1]=tmp2[0][1]%prime;
    15     a[1][0]=tmp2[1][0]%prime, a[1][1]=tmp2[1][1]%prime;
    16 }
    17 
    18 void plus21(LL a[2][2], LL b[2][2]){
    19     tmp2[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
    20     tmp2[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
    21     a[0][0]=tmp2[0][0]%prime, a[1][0]=tmp2[1][0]%prime;
    22 }
    23 
    24 LL fib(LL n){
    25     a[0][1]=0, a[1][0]=0, a[0][0]=1, a[1][1]=1;
    26     tmp1[0][0]=tmp1[0][1]=tmp1[1][0]=tmp1[1][1]=1;
    27     tmp1[1][1]=0;
    28     --n;
    29     while (n){
    30         if (n&1) plus22(a, tmp1);
    31         plus22(tmp1, tmp1);
    32         n>>=1;
    33     }
    34     tmp1[0][0]=1, tmp1[1][0]=0;
    35     plus21(a, tmp1);
    36     return a[0][0];
    37 }
    38 
    39 int main(){
    40     while(~scanf("%lld", &n))
    41         printf("%lld
    ", (fib(2*n+3)-1)%prime);
    42     return 0;
    43 }

    这道题就打表+矩阵快速幂求斐波那契数列。。

  • 相关阅读:
    Go Example--json
    Go-struct
    Flutter高级进阶------Flutter Package、Flutter Plugin、Flutter Module
    Flutter项目实操---资讯、发布动弹
    Kotlin项目实战之手机影音---首页mvp重构、网络框架封装、重构首页数据加载、home页面view解绑
    vscode多处编辑
    配制vscode环境
    vscode配制perl环境
    R基本函数总结
    Git使用方法
  • 原文地址:https://www.cnblogs.com/MyNameIsPc/p/7541673.html
Copyright © 2011-2022 走看看