uva11582——Colossal Fibonacci Numbers!(2018/1/30)
2018-01-29 09:32
316 查看
题目大意:
输入两个非负整数a,b和正整数n(0<= a,b<= 264264,1<= n <= 10000),你的任务就是计算f(abab)除以n的余数。其中f( 0 ) = 0, f( 1 ) = 1,且对于所有非负整数ii,f(i+2i+2) = f(i+1i+1) + f(ii)。
思路:起初也没什么思路,这题数量太大,这样应该先考虑是不是有规律。。。
1、由于是每一项都是对 n 取模,所以不同的 n 值都会对应一个周期,只要循环一下。当前项等于 f1f1,前一项等于f0f0时就可以跳出循环了。
2、a的b次方法用快速幂乘法:
最后附上ac代码:
输入两个非负整数a,b和正整数n(0<= a,b<= 264264,1<= n <= 10000),你的任务就是计算f(abab)除以n的余数。其中f( 0 ) = 0, f( 1 ) = 1,且对于所有非负整数ii,f(i+2i+2) = f(i+1i+1) + f(ii)。
思路:起初也没什么思路,这题数量太大,这样应该先考虑是不是有规律。。。
1、由于是每一项都是对 n 取模,所以不同的 n 值都会对应一个周期,只要循环一下。当前项等于 f1f1,前一项等于f0f0时就可以跳出循环了。
int solve(int n) { F[0] = 0; F[1] = 1 % n; for (int i = 2; ; i++) { F[i] = (F[i-1] + F[i-2]) % n; if (F[i-1] == F[0] && F[i] == F[1]) return i - 1; } }
2、a的b次方法用快速幂乘法:
unsigned long long pow_m(unsigned long long a,unsigned long long b,unsigned long long n) { unsigned long long sum = 1; while(b > 0) { if(b&1) sum *= a%n; b >>= 1; a = (a*a)%n; } return sum; }
最后附上ac代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1024; int F[N*N]; int pow_m(unsigned long long a,unsigned long long b,int n) { a %= n; unsigned long long sum = 1; while(b != 0) { if(b&1) sum = (sum*a)%n; b >>= 1; a = (a*a)%n; } return sum; } int solve(int n) { F[0] = 0; F[1] = 1 % n; for (int i = 2; ; i++) { F[i] = (F[i-1] + F[i-2]) % n; if (F[i-1] == F[0] && F[i] == F[1]) return i - 1; } } int main() { int t; unsigned long long a,b,s; int n; scanf("%d",&t); while(t--) { scanf("%llu%llu%d",&a,&b,&n); if(a == 0||n == 1) cout<< 0 <<endl; else{ int p = pow_m(a, b, solve(n)); //cout<<p<<endl; cout << F[p] << endl; } } return 0; }
相关文章推荐
- Colossal Fibonacci Numbers! 巨大的斐波那契数 UVA - 11582
- Uva 11582 Colossal Fibonacci Numbers!
- uva 11582 Colossal Fibonacci Numbers!
- uva 11582 Colossal Fibonacci Numbers!
- UVa11582 Colossal Fibonacci Numbers!(斐波那契数列小规律+思维)
- UVA 11582 Colossal Fibonacci Numbers!
- Colossal Fibonacci Numbers! 巨大的斐波那契数 UVA - 11582
- UVA 11582 - Colossal Fibonacci Numbers!
- UVa 11582 - Colossal Fibonacci Numbers!(取模+周期)
- Colossal Fibonacci Numbers! UVA 11582 寻找循环节
- 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!
- 模的应用--uva11582 Colossal Fibonacci Numbers!
- UVA 11582 Colossal Fibonacci Numbers!
- 例题10-1 UVa11582 Colossal Fibonacci Numbers!(同余与模算术)