分数取模

这里介绍一种分数取模的代码:

假设要求  \frac{1}{a}\quad mod \quad p

这里要引用小费马定理  a^{p-1}\quad mod \quad p = 1 \quad mod \quad p (有兴趣的可以百度查下证明过程)  ,这里对这个公式做点改动

\because \quad a^{p-1} \quad = a^{p-2}\times a

\therefore \quad (a^{p-2}\times a)\quad mod \quad p = 1\quad mod\quad p

\therefore \quad a^{p-2}\quad mod \quad p = a^{-1}\quad mod\quad p

在代码里面,我们可以通过扩展欧几里得定理来求一个数的模,但是扩展欧几里得暂时还不能求分数的模,那么这里可以将这个分数的取模换成对整数求模来得出相同的结果,也就是说把 \quad \frac{1}{a}\quad mod \quad p \quad 这个问题转化求 \quad a^{p-2}\quad mod \quad p

现在把代码放上来:

long long fast_mod(long long a,long long b) {
	long long r = 1;
	a %= mod;
	while (b) {
		if (b & 1) r = (r*a) % mod;
		a = (a*a) % mod;
		b >>= 1;
	}
	//cout << r << endl;
	return r;
}

 

同样的,如果分子不为1,那么 可以用(m\times a^{-1}) \quad mod \quad p = ((m\quad mod\quad p)\times (a^{-1}\quad mod\quad p))\quad mod \quad p(这是取模的运算规则,可以在百度查找一下,对取模十分有用) 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值