@Lin--
2018-10-03T05:55:58.000000Z
字数 514
阅读 648
计算机数学
题目:我们第一个作业是让大家做两个整数相乘,看上去非常没有意义,其实过程非常有启发性。从这个思路出发,我们可以有一种快速的求指数的算法。即,给定整数a、x和n,求a的x次方mod n。请实现一种快速求指数的算法(命名为pow)。
#递归#求指数def f(a,x):#递归终止条件if x==1: return a#x是偶数时,即求a的偶数次幂if x%2==0:#分解为等分的左右两个子问题return f(a,x//2)*f(a,x//2)#x是奇数时,即求a的奇数次幂if x%2!=0:#分解为左边偶数个a相乘(x//2)和右边奇数个a相乘((x//2)+1)return f(a,x//2)*f(a,(x//2)+1)#取模运算def Pow(a,x,n):return f(a,x)%n#测试print(Pow(2,10,17))
#迭代def Pow(a,x,n):result=1while(x!=0):#判断x是否为奇数,若是,则result乘以单独的一个aif(x%2):result*=a#x减半x=x//2#求a平方a*=areturn result%nprint(Pow(2,10,17))