算法——指数取模运算(蒙哥马利算法)
蒙哥马利算法简介
蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心之一。——百度百科
题目来源——xdoj1372
用到的公式
(a * b) % p = a % p * b % p % p
推论
base^exp % p = (base % p) * (base % p) * … *(base % p) % p(总共exp个小括号)
若为exp偶数 = (base^2 % p) * (base^2 % p) * … * (base^2 % p) % p (总共exp/2个小括号)
若exp奇数 = (base^2 % p) * (base^2 % p) * … * (base^2 % p) * base % p % p(总共(exp-1)/ 2个小括号)
……
然后一直指数减半,底数平方取模。最后得出答案。
c语言实现
#include<stdio.h>
long long int base;//底数
long long int exp_1;//指数
long long int mod;//取模数
long long Montgomery()
{long long int res = 1;while(exp_1){if (exp_1&1)//如果为奇数res = (res*base) % mod;exp_1 >>= 1;//指数对半base = (base*base) % mod;//底数平方}return res;
}
int main()
{scanf("%I64d%I64d%I64d", &base, &exp_1, &mod);printf("%I64d", Montgomery());return 0;
}
样例输入
2 10000 10007
样例输出
3909
结语
蒙哥马利算法极大地减少了运算量,并且使得数据规模极大减小。使原本看似不可能完成的程序变得可行。
算法——指数取模运算(蒙哥马利算法)相关推荐
- c语言中的取模运算符_C语言除法算法和取模运算的实现(多种算法,多种思路)...
对计算机来说,除法与求模是整数算术运算中最复杂的运算.相对其他运算(如加法与减法)来说,这两种算法的执行速度非常慢.例如,ARM 硬件上不支持除法指令,编译器调用 C 库函数来实现除法运算.直接利用 ...
- 蒙哥马利算法求解大整数幂求模
蒙哥马利大整数模幂算法 前几天写了一篇博客<25行代码实现完整的RSA算法>,是关于用Python代码实现一个完整的RSA算法的代码,整个代码中最核心.最浪费时间的代码部分就是关于求解 ...
- 算法与数据结构-数论之蒙哥马利模乘
对于乘模运算 A*B%N,如果A.B都是1024位的大数,先计算A*B,再% N,就会产生2048位的中间结果,如果不采用动态内存分配技术就必须将大数定义中的数组空间增加一倍,这样会造成大量的浪费,因 ...
- 用c语言实现蒙哥马利算法,蒙哥马利算法的概念与原理 - 全文
蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心之一. 蒙哥马利模乘的优点在于减少了取模的次数(在大数的条件下)以及简化了除法的复杂度(在2的k次幂的进制 ...
- 蒙哥马利算法(见过的资料中讲的最透彻的)
转载自:https://blog.csdn.net/zgzczzw/article/details/52712980 这篇文章为大家梳理一下整个蒙哥马利算法的本质,蒙哥马利算法并不是一个独立的算法,而 ...
- RSA算法实现与蒙哥马利算法
原理介绍 RSA 原理: 选取两个不同的大素数p.q,并计算N=p*q,选取小素数d,并计算e,使d*e % (p-1)(q-1)=1, 对于任意A<N: 若B=A**d % N 则A=B**e ...
- 杂学——密码学、中国余数定理、韩信点兵法、取模运算
目录大纲 密码学 专业术语 参考文章,简单学习 学习时,要知道的 相关时事 密码学 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于 ...
- C语言取模运算(取余运算)
C语言取模运算(取余运算) 取模算法: 取余(取模)的奥义 C语言运用 取模算法: 取模运算也叫取余运算,在C中用%来表示, 数学中叫mod. x mod y = x%y x%y = x - y[x/ ...
- 如何高效进行模乘、模幂运算?——蒙哥马利算法(Montgomery Algorithm)从入门到精通
蒙哥马利算法(Montgomery Algorithm)从入门到精通 加密算法中,模运算(包括模乘.模幂运算)是难以避免的,如何高效地进行模运算,是提高算法效率的一个关键. 直观的想法 在数学 ...
最新文章
- Windows Server中的故障转移群集的实现机制
- 网络品牌推广之标签的使用注意事项
- Google、Azure、阿里云、RedHat…全球的 K8s 圈大佬聚在一起要聊啥?
- 全球及中国碳化硅 (SiC) 肖特基二极管行业竞争潜力与供应规划研究报告2022版
- 变频器lpm故障码是什么_什么是变频器软故障,如何解决?
- vue中用的swiper轮播图的用法及github的地址
- 性能测试基本功 - Centos5.5下安装LAMP
- 云台球型摄像机行业现状调研及趋势分析报告
- 编译原理 3.28 课堂作业
- 【原创】技术员 Ghost Win 10 X86 企业贺岁版2018
- A - 娜娜梦游仙境系列——诡异的钢琴
- log4j2漏洞各大厂应对措施
- java二维数组添加数据_Java自学路线图
- linux+swap分区规则_linux关于swap分区的划分规则
- 【工业大数据】工厂大数据之数据源分析;如何挖掘并驾驭大数据的价值,成为“大数据企业”?
- 周口师范学院计算机科学,关于公布周口师范学院-计算机科学与技术学院.doc
- 如何用计算机做微积分,利用计算知识搜索引擎WolframAlpha做微积分(快速指南).doc...
- QQ五笔,正式公测版,与众Q友分享,附件
- 用JavaScript实现简单的星座查询
- react实现异步插件_react项目优化之webpack