18446744073709551615=2^64-1是unsigned long long能表示的最大的数,输入输出用%llu或%I64u。
发现很多数学题都是要你找规律的,只不过要注意特殊数据。
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
vector<ll>f[1010];
void init()
{
for(ll i=2;i<=1000;i++)
{
f[i].push_back(0);
f[i].push_back(1);
for(ll j=2;;j++)
{
ll temp=(f[i][j-2]%i+f[i][j-1]%i)%i;
if(f[i][j-1]==0&&temp==1) break;
else f[i].push_back(temp);
}
}
}
ll a,b,n;
ll mypow(ll x,ll n,ll mod)
{
x%=mod;
ll ret=1;
while(n)
{
if(n&1) ret=(ret*x)%mod;
x=(x*x)%mod;
n>>=1;
}
return ret;
}
int main()
{
init();
ll t;
scanf("%I64u",&t);
while(t--)
{
scanf("%I64u %I64u %I64u",&a,&b,&n);
if(n==1)
{
puts("0");
continue;
}
ll num=mypow(a,b,ll(f[n].size()-1));
printf("%I64u\n",f[n][num]);
}
return 0;
}