要求

实现模幂算法,通过服务器的检验。

访问http://2**.207.12.156:9012/step_04服务器会给你10个问题,每个问题包含三个数(a,b,c),请给出a^b%c的值。返回值写入字段ans,10个数字用逗号,隔开,提交到http://2**.207.12.156:9012/step_04

提示:注意逗号必须是英文逗号。

{"is_success": true, "questions": "[[1336, 9084, 350830992845], [450394869827, 717234262, 9791], [2136, 938408201856, 612752924963], [6026, 754904536976, 5916], [787296602, 305437915, 661501280], [864745305, 6963, 484799723855], [4165, 110707859589, 102613824], [398189032, 723455558974, 794842765789], [974657695, 138141973218, 760159826372], [9034, 7765, 437523243]]"}

Python程序实现

import requests as re
import time
def fastModular(x): #快速幂的实现
"""x[0] = base """
"""x[1] = power"""
"""x[2] = modulus"""
result = 1
while(x[1] > 0):
if(x[1] & 1): # 位运算加快判断奇偶
result = result * x[0] % x[2]
x[1] = int(x[1]/2)
x[0] = x[0] * x[0] % x[2]
return result answer = ''
getHtml = re.get("http://2**.207.12.156:9012/step_04/") start = time.process_time() # 运算时间戳
for i in eval(getHtml.json()['questions']): # 将带有'[]'符号的字符串转换成列表
answer += str(fastModular(i)) + ','
end = time.process_time() # 运算时间戳 param = {'ans':answer[:-1]}
print(f"Runing time is { end- start} sec")
getHtml = re.get("http://2**.207.12.156:9012/step_04/",params=param)
print(getHtml.text) >>>
runing time is 0.0 s
{"is_success": true, "message": "please visit http://2**.207.12.156:9012/context/eb63fffd85c01a0a5d8f3cadea18cf56"}
>>>

直接运行即可获得下一步链接答案!!

How can we calculate A^B mod C quickly if B is a power of 2 ?

Using modular multiplication rules:

i.e. A^2 mod C = (A * A) mod C = ((A mod C) * (A mod C)) mod C

a^b % c = (a % c)^b % c

(a * b * c) % d = {(a % d) * (c % d) * (b % d)} % d

a^5 % c = (a % c)^5 % c = {(a % c) * (a % c) * (a % c) * (a % c) * (a % c)} % c

一种算法是利用{(a % c) * (a % c) * (a % c) * (a % c) * (a % c)} % c,利用正常求幂次的方法,将变量进去迭代。result = result * a % c这样会迭代5次,也就是幂次的运算时间复杂度。

注:迭代运算{(result % c) * (a % c)} % c == result * a % c

还有一种就是利用底数和幂次的关系,将幂次除以2,底数平方倍。这个数还是不变的。再加上利用引理就会方便很多。log(power)的时间复杂度。

4^20 mod 11 = 1099511627776 % 11 =1

= 16^10 mod 11 = (16 mod 11)^10 = 5 ^ 10 mod 11

= 25 ^ 5 mod 11 = (25 mod 11)^5 = 3 ^ 5 mod 11

9 ^ 2.5 = 9 ^ 2 * 9^(1/2) = 9 ^ 2 * 3 mod 11

上面这个需要平方3变9 再开2次方 9变3,得到结果。简化后我们发现这种方法可以归结为,当幂次变成奇数的时候,我们将奇数减一,除以二,底数平方,并乘以底数 进行计算。结果是一样的。这样想更简单。也方便程序实现

3 ^ 5 mod 11 = 9 ^ 2 * 3 mod 11 ( 5-1=4 ,4/2=2 )

= (9 mod 11)^2 mod 11 = 2 ^ 2 *3 mod 11

= 4 ^ 1 * 3 mod 11 = (4 mod 11)^1 * 3 mod 11 = 7^1 * 3 mod 11

= 49^0 *7 *3 mod 11 =21 % 11

=1

奇数减一分成偶数次幂那部分最终都会到0次,结果为1。而分出去的一次幂就是决定结果的关键因素。

大数的快速幂模 Python实现的更多相关文章

  1. codeforces magic five --快速幂模

    题目链接:http://codeforces.com/contest/327/problem/C 首先先算出一个周期里面的值,保存在ans里面,就是平常的快速幂模m做法. 然后要计算一个公式,比如有k ...

  2. 快速幂模n运算

    模运算里的求幂运算,比如 5^596 mod 1234, 当然,直接使用暴力循环也未尝不可,在书上看到一个快速模幂算法 大概思路是,a^b mod n ,先将b转换成二进制,然后从最高位开始(最高位一 ...

  3. URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)

    题目链接 题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数. 思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法.RSA算 ...

  4. hdu 2462(欧拉定理+高精度快速幂模)

    The Luckiest number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  6. hdu 1852(快速幂模+有除法的时候取模的公式)

    Beijing 2008 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Tota ...

  7. 2019南昌邀请赛 C. Angry FFF Party 大数矩阵快速幂+分类讨论

    题目链接 https://nanti.jisuanke.com/t/38222 题意: 定义函数: $$F(n)=\left\{\begin{aligned}1, \quad n=1,2 \\F(n- ...

  8. [原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)

    本文出自:http://blog.csdn.net/svitter 题意: f(x) = K, x = 1 f(x) = (a*f(x-1) + b)%m , x > 1 求出( A^(f(1) ...

  9. 快速幂模m算法

    给你三个数,a,b,m 求a^b%m的值. 如果b过大,用普通的快速幂会超时. 所以将b=2^0*b0+2^1*b+b1...... 然后,你们利用初中的知识就知道怎么做了. 继续,上代码. #inc ...

随机推荐

  1. Mysql索引降维 优化查询 提高效率

    在前一篇文章中,我们已经介绍了索引.索引的优化规则等等 原文链接:Siam博客 mysql索引优化 在其中我们有引申出组合索引,多个单字段索引冲突两个知识点. 本文章主要是与后者有关联. 在原文中,我 ...

  2. fast-poster海报生成器v1.4.0,一分钟完成海报开发

    fast-poster海报生成器v1.4.0,一分钟完成海报开发 介绍 一个快速开发动态海报的工具 在线体验:https://poster.prodapi.cn/ v1.4.0 新特性 为了项目和团队 ...

  3. 全彩LED灯

    1.全彩 LED 灯,实质上是一种把红.绿.蓝单色发光体集成到小面积区域中的 LED 灯,控制时对这三种颜色的灯管输出不同的光照强度,即可混合得到不同的颜色,其混色原理与光的三原色混合原理一致.例如, ...

  4. Java基础——自己的总结

    Java Java是什么? Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作 ...

  5. C#版Nebula客户端编译

    一.需求背景 从Nebula的Github上可以发现,Nebula为以下语言提供了客户端SDK: nebula-cpp nebula-java nebula-go nebula-python nebu ...

  6. ssh保持长连接的方式

    方法有以下三种:1.修改server端的etc/ssh/sshd_configClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从 ...

  7. informix数据库分页

    需求描述 当查询结果返回大量数据情况下,比如报表查询.需要按一定条件排序提供分页呈现数据. INFORMIX实现方案:Informix 数据库提供了非常便捷.高效的SQL. SELECT SKIP M ...

  8. 数据结构与算法(python版)

    ADT抽象数据类型(ADT:Abstract Data Type):ADT是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理. 同一ADT可以采用不同的数据结构来实现:1.采用程序设计语言的控制 ...

  9. python解析excel

    import xlrd, base64excel_obj = xlrd.open_workbook(file_contents=base64.decodestring(filename)).#打开要解 ...

  10. maven 与profile,resources,properties 关系

    top 的 pom.xml 看<profiles>的标签 <profiles> <!--dat环境--> <profile> <id>DAT ...