UVa 11582

数学题,寻找斐波那契取模后的周期T,然后求Mod_Fib(a^b % T)即可。

a^b % T时要用快速幂来计算,详细方法为http://blog.csdn.net/kun768/article/details/42344897

#include <cstdio>
#include <iostream>
using LLU = unsigned long long;
using namespace std;

int Fib[1024000];

int init(const int n) {
	Fib[0] = 0, Fib[1] = 1;
	for (int i = 2;; ++i){
		Fib[i] = (Fib[i - 1] + Fib[i - 2]) % n;
		if (Fib[i] == 1 && Fib[i - 1] == 0)
			return i - 1;
	}
}
int Pow(LLU a, LLU b, int Base){
	LLU res = 1;
	LLU t = a;
	while (b > 0) {
		if (b % 2) res = (res * t) % Base;
		t = (t * t) % Base;
		b >>= 1;
	}
	return (int)res;
}
int main()
{
	int T; cin >> T;
	while (T--) {
		LLU a, b; int n; cin >> a >> b >> n;
		if (n == 1) { puts("0"); continue; }
		int Base = init(n);
		cout << Fib[Pow(a % Base, b, Base)] << endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/kunsoft/p/5312690.html