zoukankan      html  css  js  c++  java
  • UVa 11582

    题意

    输入两个非负整数a、b和正整数n(0≤a,b<2^64,1≤n≤1000),你的任务是计算f(a^b)除以n的余数。其中f(0)=f(1)=1,且对于所有非负整数i, f(i+2)=f(i+1)+f(i)。

    思路

    f[i] %= n
    会出现循环

    记录

    快速幂取模 – 模版

    int quick(int a,int b,int c)  
    {  
        int ans = 1;   //记录结果  
        a = a % c;   //预处理,使得a处于c的数据范围之下  
        while(b!=0)  
        {  
            if(b & 1) ans = (ans*a) % c;   //如果b的二进制位不是0,那么我们的结果是要参与运算的  
            b >>= 1;    //二进制的移位操作,相当于每次除以2,用二进制看,就是我们不断的遍历b的二进制位  
            a = (a*a) % c;   //不断的加倍  
        }  
        return ans;  
    }

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    typedef unsigned long long ULL;
    
    const int maxn = 1000+100;
    ULL Fbnq[maxn*maxn];
    
    int solve( ULL a, ULL b, int M )
    {
        int k = 1;
        while( b ){
            if( b & 1 )    k = (k*a)%M;
                k *= a, k %= M;
            a = (a*a) % M;
            b >>= 1;
        }
        return k;
    }
    
    void Fibonacci( ULL a, ULL b, int n ){
        int M;
        if( n == 1 || a == 0 ){
            puts("0");
            return;
        }
        Fbnq[1] = 1, Fbnq[2] = 1;
        for( int i = 3; i <= n*n+10; i++ )
        {
            Fbnq[i] = Fbnq[i-1] + Fbnq[i-2];
            Fbnq[i] %= n;
            if( Fbnq[i] == 1 && Fbnq[i-1] == 1){
                M = i - 2;
                break;
            }
        }
        int k = solve( a % M, b, M );
        printf("%d
    ",Fbnq[k]);
    }
    
    int main()
    {
        int T, n;
        ULL a, b;
        scanf("%d",&T);
        while(T--){
            scanf("%llu%llu%d",&a,&b,&n);
            Fibonacci( a, b, n );
        }
        return 0;
    }
  • 相关阅读:
    廖雪峰Java6IO编程-2input和output-1inputStream
    安装spy-debugger查看前端日志
    廖雪峰Java6IO编程-1IO基础-1IO简介
    廖雪峰Java5集合-6Stack-1使用Stack
    廖雪峰Java5Java集合-5Queue-1使用Queue
    廖雪峰Java5集合-4Set-1使用Set
    20)升级登录标志
    19)加了验证码验证
    94)图片验证码
    18)添加引号转移函数,防止SQL注入
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740614.html
Copyright © 2011-2022 走看看