zoukankan      html  css  js  c++  java
  • wyh的数列~(坑爹题目)

    链接:https://www.nowcoder.com/acm/contest/93/K
    来源:牛客网

    题目描述

    wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2)

    一天他突发奇想,想求F(a^b)%c

    输入描述:

    输入第一行一个整数T(1<=T<=100),代表测试组数
    接下来T行,每行三个数 a,b,c (a,b<=2^64) (1<c<1000)

    输出描述:

    输出第a^b项斐波那契数对c取余的结果
    示例1

    输入

    3
    1 1 2
    2 3 1000
    32122142412412142 124124124412124 123

    输出

    1
    21
    3

    这题超级超级坑爹 ,专门卡着long long ,要用unsigned long long ,
    由于这个原因我卡了好久好久。
    这个题目不断的取模,会使得斐波那契数列形成一个环.
    然后就是一个快速幂取模。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define ll long long
     5 #define llu unsigned long long
     6 const int maxn=1e5+10;
     7 
     8 llu f[maxn];
     9 llu modexp(llu a,llu b,llu c)
    10 {
    11     llu res=1,temp=a%c;
    12     while(b){
    13         if (b&1) res=res*temp%c;
    14         temp=temp*temp%c;
    15         b=b>>1;
    16     }
    17     return res;
    18 }
    19 int main(){
    20     int t;
    21     scanf("%d",&t);
    22     while(t--){
    23         llu a,b,c;
    24         scanf("%llu%llu%llu",&a,&b,&c);
    25         f[0]=0,f[1]=1;
    26         for (int i=2 ; ;i++){
    27             f[i]=(f[i-1]+f[i-2])%c;
    28             if (f[i]==1 && f[i-1]==0) {
    29                 c=i-1;
    30                 break;
    31             }
    32         }
    33         printf("%llu
    ",f[modexp(a,b,c)]);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    Go语言学习笔记(3)
    Haskell语言学习笔记(97)Phantom Type
    Rust语言学习笔记(12)
    堆排序 Rust实现
    Rust 智能指针(Rc)
    Rust 泛型
    Rust 枚举
    Rust 结构体
    Rust 引用
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/8724056.html
Copyright © 2011-2022 走看看