UVa 11582 (快速幂取模) Colossal Fibonacci Numbers!
2014-12-08 13:50
399 查看
题意:
斐波那契数列f(0) = 0, f(1) = 1, f(n+2) = f(n+1) + f(n) (n ≥ 0)
输入a、b、n,求f(ab)%n
分析:
构造一个新数列F(i) = f(i) % n,则所求为F(ab)
如果新数列中相邻两项重复出现的话,则根据递推关系这个数列是循环的。
相邻两项所有可能组合最多就n2中,所以根据抽屉原理得到这个数列一定是循环的。
求出数列的周期,然后快速幂取模即可。
代码君
斐波那契数列f(0) = 0, f(1) = 1, f(n+2) = f(n+1) + f(n) (n ≥ 0)
输入a、b、n,求f(ab)%n
分析:
构造一个新数列F(i) = f(i) % n,则所求为F(ab)
如果新数列中相邻两项重复出现的话,则根据递推关系这个数列是循环的。
相邻两项所有可能组合最多就n2中,所以根据抽屉原理得到这个数列一定是循环的。
求出数列的周期,然后快速幂取模即可。
#include <cstdio> #include <iostream> using namespace std; const int maxn = 1000 + 10; typedef unsigned long long ULL; int f[maxn][maxn * 6], period[maxn]; int pow_mod(ULL a, ULL b, int n) { if(b == 0) return 1; int k = pow_mod(a, b/2, n); k = k * k % n; if(b % 2 == 1) k = k * a % n; return k; } int solve(ULL a, ULL b, int n) { if(a == 0 || n == 1) return 0; int p = pow_mod(a % period , b, period ); return f [p]; } int main(void) { freopen("11582in.txt", "r", stdin); for(int n = 2; n < maxn; ++n) { f [0] = 0, f [1] = 1; for(int i = 2; ; ++i) { f [i] = (f [i-2] + f [i-1]) % n; if(f [i-1] == 0 && f [i] == 1) { period = i - 1; break; } } } ULL a, b; int n, T; scanf("%d", &T); while(T--) { cin >> a >> b >> n; printf("%d\n", solve(a, b, n)); } return 0; }
代码君
相关文章推荐
- 快速幂取模+数学知识(Colossal Fibonacci Numbers! uva 11582)
- UVA - 11582 - Colossal Fibonacci Numbers!(快速幂+打表)
- Uva 11582 Colossal Fibonacci Numbers! 快速幂,斐波那契
- uva11582Colossal Fibonacci Numbers!(快速幂+预处理)
- UVa11582 [快速幂]Colossal Fibonacci Numbers!
- uva 11582 - Colossal Fibonacci Numbers!(整数快速幂)
- UVa11582 - Colossal Fibonacci Numbers! (快速幂 取模)
- UVA 11582(p316)----Colossal Fibonacci Numbers!
- UVA - 11582 Colossal Fibonacci Numbers!
- UVA 11582 Colossal Fibonacci Numbers!
- UVA - 11582 Colossal Fibonacci Numbers!循环节
- UVa 11582 - Colossal Fibonacci Numbers!
- UVA 11582 Colossal Fibonacci Numbers! (大斐波那契数)
- 【UVA】11582 - Colossal Fibonacci Numbers!(快速幂)
- UVa11582 - Colossal Fibonacci Numbers!
- UVA 11582 Colossal Fibonacci Numbers! 大斐波那契数
- Uva 11582 Colossal Fibonacci Numbers!
- UVA - 11582 Colossal Fibonacci Numbers! 巨大的斐波那契数
- UVa 11582 - Colossal Fibonacci Numbers!
- uva 11582 Colossal Fibonacci Numbers!