您的位置:首页 > 其它

【重走普及路】【分治】【经典算法】快速幂

2015-12-27 14:23 218 查看

题目描述

输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

输入输出格式

输入格式:三个整数b,p,k.输出格式:输出“b^p mod k=s”s为运算结果

输入输出样例

输入样例#1:
2 10 9
输出样例#1:
2^10 mod 9=7
分治,即将大问题拆分为小问题,分而治之,各个击破,然后在合并回来。First:暴力解决不解释 O(n) 爆t:=b;for i:=2 to p do t:=(t*b) mod k;Second:因为a^b mod c=(a^2)^(b/2) mod c  (b mod 2=0);  a^b mod c=((a^2)^(b div 2)*a) mod c (b mod 2=1)   所以可以在计算过程中不断地将底数平方、指数除以2,用另一个变量记录最终答案。var t,b,p,k:int64;beginreadln(b,p,k);write(b,'^',p,' mod ',k,'=');b:=b mod k;t:=1;while p>0 do beginif p mod 2=1 then t:=t*b mod k;p:=p div 2;b:=(b*b) mod k;end;writeln(t);end.

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pascal 分治 经典算法