题目大意:
1.f(0) = 0 and f(1) = 1•
2.f(i + 2) = f(i + 1) + f(i)(i>=0)
现在给出a,b,n,求f(a^b)除以n的余数。
题目分析:
这个题目的关键就是要知道这个序列(f[i]%n)是有循环节的。
代码:
#include
#include
using namespace std;
typedef unsigned long long LL;
LL a,b,c;
vectorv;
LL cal()
{
v.clear();
v.push_back(0);v.push_back(1);
int flag=0;
for(int i=2;;i++){
LL ans=(v[i-1]%c+v[i-2]%c)%c;
if(ans==0){
flag=1;
}
if(ans==1){
if(flag==1){
return (LL)v.size()-1;
}
} else if(ans){
flag=0;
}
v.push_back(ans);
}
}
LL poww_add(LL a,LL b,LL mod)
{
LL ans=0;
while(b)
{
if(b&1) ans=(ans%mod+a%mod)%mod;
b>>=1;
a=(a%mod+a%mod)%mod;
}
return ans;
}
LL poww_mul(LL a,LL b,LL mod)
{
LL ans=1;
while(b)
{
if(b&1) ans=poww_add(ans,a,mod)%mod;
b>>=1;
a=poww_add(a,a,mod)%mod;
}
return ans;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
cin>>T;
while(T--)
{
cin>>a>>b>>c;
if(c==1){
cout<<0<