高次幂求模
来源:互联网 发布:淘宝账号申请商家淘客 编辑:程序博客网 时间:2024/06/03 16:07
参考资料:(模运算)http://baike.baidu.com/view/2385246.htm
(神牛总结):http://blog.csdn.net/jixuan1989/article/details/6759365
(uva例题分析):http://blog.csdn.net/mobius_strip/article/details/8221846
递归求解
/*首先是一种分支的思想:比如: 7^100我们可以写成(7^50)^2 = ((7^25)^2)^2 = .....=(((7^1)^2)....)^2还要知道一个模运算:(a * a) % b = (a%b * a%b)%b;所以知道了 ans = (7^1) % 3;我们就可以算出来 ((7^1)^2) % 3 = (7^1 * 7^1) % 3就是 (ans * ans ) % 3依次类推最终有 ans = (7^50) % 3;所以 7^100 = (7^50 * 7^50) % 3 = ans * ans % 3还有一种特殊情况比如 7^13 = (7^6)^2*7; ->多乘一个7*/#include<cstdio>#include<cstring>#include<iostream>using namespace std;long Big_Mod(long x,long y,long mod){ /*求(x^y)%mod*/ if(y == 0) return 1; if(y == 1) return x % mod; long ans = Big_Mod(x,y/2,mod); if(y & 1)/*如果是奇数*/ ans = (ans * ans) % mod * ( x % mod); else ans = (ans * ans ) % mod; return ans;}int main(){ long x,y,mod; while(scanf("%d%d%d",&x,&y,&mod) != EOF){ cout<<Big_Mod(x,y,mod); } return 0;}
0 0