给出无符号64位的a b两个数,要求斐波那契数列中第a的b次方个数是多少?(此数对n取模)
取模运算a^b%n=(a%n)^b,运用快速幂搞一手就好了
然后这里需要注意的是无符号输入的格式问题,见代码,以及n为1的情况,深入思考一下就好了
#include<stdio.h>
#define LL unsigned long long
LL mod;
int f[100000+5];
LL fast_pow(LL a,LL b)
{
LL ans=1;
a=a%mod;
while(b)
{
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
int T;
freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
LL a,b,n;
int cnt=3;
scanf("%llu%llu%llu",&a,&b,&n);
f[0]=0;
f[1]=f[2]=1%n;
while(1)
{
f[cnt]=(f[cnt-1]+f[cnt-2])%n;
if(f[cnt-1]==f[0]&&f[cnt]==f[1])
break;
cnt++;
}
mod=cnt-1;
LL ans=fast_pow(a,b);
printf("%d\n",f[ans]);
}
return 0;
}