高次幂求模

来源:互联网 发布:淘宝账号申请商家淘客 编辑:程序博客网 时间: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
原创粉丝点击