题目
题意大致是输入2的64次方以内的数求出它们取模以后下标的斐波那契数列的值,斐波那契数列在模上某个值后是具有循环节的,我们要把循环节的长度算出来,然后把循环节长度带入快速幂最后再模上n求出答案。本题坑点就是数据范围用longlong还不够要用unsigned long long,当n为1的时候答案都是0。
AC代码:

#include<iostream>
using namespace std;
typedef unsigned long long ull;
const	int N=1010000;
int f[N];
int qs(ull a,ull b,int n)
{
   
	int res=1;
	while(b)
	{
   
		if(b&1)	res=(ull)res*a%n;
		b>>=1;
		a=(ull)a*a%n;
	}
	return res;
}
int main()
{
   
	ull a,b;
	int t;
	int n;
	int len=1;
	cin>>t;
	while(t--){
   
	cin>>a>>b>>n;
	f[0]=0,f[1]=1;
	
	if(n==1){
   
		printf("0\n");
		continue;
	}
	for(int i=2;i<=n*n+100;i++)
	{
   
		f[i]=(f[i-1]+f[i-2])%n;
		if(f[i]==1&&f[i-1]==0)
		{
   
			len=i-1;
			break;
		}
	}
	cout<<f[qs(a%len,b,len)]<<endl;	}
	return 0;
}