a*b(mod m)的实现过程

/*a*b (mod m) 的实现过程*/
/*当a,b很大的时候mod m就会产生溢出, 故运用乘法原理转换为加法求解*/
LL multi(LL a, LL b, LL m)
{
	LL exp = a %m, res = 0;
	while (b)
	{
		if (b & 1)  		//b的最低位是否为1
		{
			res = res + exp;
			if (res >= m)
				res = res -m;
		}
		exp = exp *2;
		if (exp > m)
			exp = exp - m;
		b >>= 1; 			//将b除以2
	}
	return res;
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 04:50:45

a*b(mod m)的实现过程的相关文章

密码学之《数字签名》

周六要考密码学了,恰逢身体不舒服,没心情看数字什么的,来整理整理数字签名的一点儿知识点~简简单单的几行文字,看官笑看即可~ 什么是数字签名?有毛用? 数字签名主要用于对数字消息进行签名,以防消息的冒名伪造或篡改,也可以用作通信双方的身份鉴别. 为什么数字签名有这样那样的作用? 数字签名有这样几个特性: 1. 可信.任何人都可以验证签名的有效性 2. 不可伪造.除了合法的签名者,任何其他人伪造签名是困难的. 3. 不可复制.对一个消息的签名不能通过复制变成另一个消息的签名,若是复制得到,任何人都能

HNOI2008Cards

暗了一下polya和burnside定理,感觉还行(就是不会证……) 这题用的是burnside ans=在每个置换群下不动的方案数之和除以置换数 这题有个难点在取模 关于对p(p为素数)取模(涉及到了除法),我总结了两种方法: 已知x mop p=y,要求x/z mod p=? 大体思路是利用乘法逆,将/z转换成*z的逆元即可 一.利用费马小定理 z^p-1 mod p=1 所以z的逆元=power_mod(z,p-2,p) 二.利用拓展欧几里德算法,即exgcd(z,p,x,y) while

加密算法 - RSA

与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥. 就是有2把钥匙1.使用publicKey可以对数据进行加密2.使用Key才能对数据进行解密单方向传输用公钥加密的数据,只有私钥能解开(可用于加密):同时,使用私钥加密的数据,只有公钥能解开(签名).但是速度很慢(比私钥加密慢100到1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等 公钥与私钥1.权威数字认证机构(CA)给所有通信主体(个人或组织)颁发公钥和私钥,彼此配对,分别唯一.

C(m,n)%P

program1 n!%P(P为质数) 我们发现n! mod P的计算过程是以P为周期的的,举例如下: n = 10, P = 3 n! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 = 1 * 2 * 4 * 5 * 7 * 8 * 10 * 3 * 6 * 9 = (1 * 2)^3 * 1* 3^3 * (1 * 2 * 3) 最后一步中的1 * 2 *3可递归处理. 因为P的倍数与P不互质,所以P的倍数不能直接乘入答案,应当用一个计数器变量g来保存答案

读贾志鹏线性筛有感

先拜大牛.感谢贾志鹏严谨的思维.以及简单清晰的论文描述. 一定要结合论文看.我只是提出我觉得关键的部分.论文在网上随处可见.贾志鹏线性筛. 开头两种线性筛的比较. 一种是传统的线性筛.时间复杂度为N*log(log(N)). 另外一种是优化了合数的筛法.文中称作Euler线性筛. 其优化的地方. 举个例子:合数6. 是2的倍数也是3的倍数. 当你用传统的筛法的时候在遍历2的倍数的时候会遍历到6.遍历3的倍数的时候同样也会遍历到6. 而另外一种只会筛出6为2的倍数.3就不会筛6了. 另外个人认为筛

P2P系统,一致性哈希和DHT

数据网格产品经常会使用P2P进行通信,借此机会系统地学习一下P2P网络和其资源搜索策略. 1 P2P网络架构 谈到P2P就涉及到一个概念:Overlay Network(覆盖网络).所谓覆盖网络是应用层网络,几乎不考虑网络层和物理层,它具体指的就是建立在另一个网络上的网络.例如P2P网络就是覆盖网络,因为它运行在互联网之前,但允许对未知IP主机的访问.通过DHT等算法,可以在事先不知道IP地址的情况下,访问到存储某个文件的结点. 常见的P2P系统主要有Unstructured Network和S

seaJS 模块加载过程分析

先看一个seajs的官方example,  以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main"); //main.js define(function(require) { var Spinning = require('./spinning'); var s = new Spinning('#container'); s.render(); }); //spinning.js define(funct

3个著名加密算法(MD5、RSA、DES)的解析

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.    MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数. MD5的典型应用是对一段Message(字

c++ 简单的实现椭圆曲线加密算法

椭圆曲线算法 椭圆曲线密码体制来源于对椭圆曲线的研究,所谓椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程: y2+a1xy+a3y=x3+a2x2+a4x+a6 (1) 所确定的平面曲线.其中系数ai(I=1,2,-,6)定义在某个域上,可以是有理数域.实数域.复数域,还可以是有限域GF(pr),椭圆曲线密码体制中用到的椭圆曲线都是定义在有限域上的. 椭圆曲线上所有的点外加一个叫做无穷远点的特殊点构成的集合连同一个定义的加法运算构成一个Abel群.在等式 mP=P+P+-+P=Q (