nyoj 102 同余幂算法
2013-03-25 16:45
162 查看
次方求模
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述
求a的b次方对c取余的值
输入第一行输入一个整数n表示测试数据的组数(n<100)
每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000)
输出输出a的b次方对c取余之后的结果
样例输入
3 2 3 5 3 100 10 11 12345 12345
样例输出
3 1 10481
来源
[张云聪]原创
/*需要快速的求出同余幂bn mod m,
其中b,n,m都是比较大的整数。例如取b=12345678,n=456789,
直接计算显然是不可行的,可以把n按二进制展开,则n=456789就
变成了1101111100001010101,这样每次只需要求b mod m,b2 mod m,
... b2^(k-1) mod m,然后把对应位置上的二进制是1的项乘起来,
每次乘完后求除m的余数即可,大大降低了计算的复杂度,当然这里要在程序中的话可以
通过处理就通过对b取余2,关于这些处理可以自己想办法、
在《离散数学及其应用》里介绍了这种方法,用于密码学中。*/
#include <iostream> using namespace std; long long powermod(long long a , long long b , long long c ); int main() { int n ; long long a , b , c ; long result = 0 ; cin>>n; while ( n-- ) { cin>>a>>b>>c; result = powermod(a,b,c); cout<<result<<endl; } return 0; } long long powermod(long long a , long long b , long long c ) { long long t = 1 ; if ( b == 0 ) { return 1%c; } if ( b == 1 ) { return a%c; } t = powermod(a,b/2,c); t = t*t%c; if ( b%2 == 1 ) { t = t*a%c ; } return t; }
相关文章推荐
- nyoj 102 次方求摸 快速幂
- 次方求模(nyoj 102)(快速幂)
- NYOJ 102 次方求模
- nyoj-102-次方求模
- nyoj 102 次方求摸 快速幂
- NYOJ-102-次方求模
- NYOJ 题目102 次方求模(快速幂取余)
- nyoj 102 最大和
- NYOJ 102 次方求模
- 【NYOJ - 102】 次方求模 + 快速幂
- Nyoj 102 次方求模
- nyoj 102 次方求模【快速幂】
- 【快速幂模板】 nyoj102 次方求摸 420 p次方求和(快速幂+同余定理)
- 次方求模(快速幂算法) nyoj 102
- nyoj 102 次方求模 快速求幂
- nyoj 102 次方求模
- nyoj102 次方求模
- NYOJ 102 次方求模
- nyoj102次方求模
- NYOJ 102、111