(转载)求答案模一个数的结果
2015-08-20 14:54
176 查看
做题时,经常要求“答案模一个数”的结果。
并且这个数往往是1000000007。
如果只有乘法和加法,那么我们对此毫无压力。
但是,除法出现时,我们往往需要用高精除法。
而费马小定理给我们带来了福音!从此,我们再不用为了区区一个模1000000007而用高精除法了。
费马小定理:若p是质数,且a、p互质,那么a^(p-1) mod p = 1。
果断忽略证明...
现在,我们要求a/c mod p,通过一系列神奇的转化,那万恶的除法就会神奇地消失...
a / c mod p
= a / c mod p * 1
= a / c mod p * c^(p-1) mod p
= a * c^(p-2) mod p
转化完毕。
当c与p不互质的时候,费马小定理就无能为力了。
其实,我们还有另一种方法。
设a / c = b,要求b mod p
a = k1*p + b1,
b = k2*p + b2,
则目标就是求b2
那么原式化为(k1*p + b1) / c = (k2*p + b2)
b2*c + p(k2*c - k1) = b1
设k2*c - k1 = x, b2 = y,那么px + cy = b1,其中p、c和b1已知,则可通过不定方程求解得到y',调整y'使0<=y'<p即可。
并且这个数往往是1000000007。
如果只有乘法和加法,那么我们对此毫无压力。
但是,除法出现时,我们往往需要用高精除法。
而费马小定理给我们带来了福音!从此,我们再不用为了区区一个模1000000007而用高精除法了。
费马小定理:若p是质数,且a、p互质,那么a^(p-1) mod p = 1。
果断忽略证明...
现在,我们要求a/c mod p,通过一系列神奇的转化,那万恶的除法就会神奇地消失...
a / c mod p
= a / c mod p * 1
= a / c mod p * c^(p-1) mod p
= a * c^(p-2) mod p
转化完毕。
当c与p不互质的时候,费马小定理就无能为力了。
其实,我们还有另一种方法。
设a / c = b,要求b mod p
a = k1*p + b1,
b = k2*p + b2,
则目标就是求b2
那么原式化为(k1*p + b1) / c = (k2*p + b2)
b2*c + p(k2*c - k1) = b1
设k2*c - k1 = x, b2 = y,那么px + cy = b1,其中p、c和b1已知,则可通过不定方程求解得到y',调整y'使0<=y'<p即可。
相关文章推荐
- 关于kindle无法联网(连wifi)解决方案
- 斩断一切看价值
- 图结构练习——BFSDFS——判断可达性 SDUT 2138
- 九度oj 1098
- Keil C51 的printf sprintf
- Android - Animation 贝塞尔曲线之美
- SICP-2锻炼.34
- 俄罗斯农夫算法
- 一个Myeclipse同时配置多个Tomcat
- 迅为4412开发板Linux驱动教程/硬件知识及原理图的使用
- Python中列表和元组的相关语句和方法讲解
- 文章标题
- SQLite学习笔记(4)-数据库基本操作
- PN学习
- 折半查找
- 一段小插曲----银江股份
- js关闭窗口不提示
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- SVN文件库移植(转)
- iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)