1. 程式人生 > >快速冪+斐波那契數列

快速冪+斐波那契數列

斐波那契 can signed def main cout mod style blank

題意:

給出 a, b ,n。

求 f(a^b)%n的值。f()是斐波那契數列。

UVA 11582

代碼:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
typedef unsigned long long ll;
using namespace std;
ll f[1000005];
ll pow_mod(ll a,ll n,ll mod)
{
   ll res=1;
    while(n>0)
    {
        if(n&1
) res=res*a%mod; a=(a%mod)*(a%mod)%mod; n>>=1; } return res; } int main() { int t; scanf("%d",&t); while(t--) { ll a,b,n,mod; cin>>a>>b>>n; f[1]=1%n,f[2]=1%n; for(int i=3;;i++) { f[i]
=f[i-1]+f[i-2]; f[i]%=n; if(f[i]==f[2]&&f[i-1]==f[1]) { mod=i-2; break; } } ll x=pow_mod(a,b,mod); cout<<f[x]<<endl; } return 0; }

快速冪+斐波那契數列