数论-取模

取模问题

一、取模运算

二、复数取模

一、取模运算
1.取模加减乘除法

(a + b)%M = (a%M + b%M)%M
(a - b)%M = (a%M - b%M + M )%M (a%M - B%M 后的值一定小于M)
(a * b)%M = (a%M)*(b%M)%M
当然这里还没有除法的取模
还有指数的取模:a^b%p = (a%p)^(φ( p ) + b%φ( p )) %p(降幂公式)
除法的取模参考这篇博客:https://blog.csdn.net/qq_53269459/article/details/120464725

指数取模参考:欧拉定理延伸

下面两种方法都用到了取模加减乘乘除运算,才能有下面两种方法的快速运算

2.快速幂

264 >= unsigned long long

typedef long long ll;
ksm(ll a,ll p)
{
	ll res = 1;
	while(p){
		if(p&1) res = res*a%M;
		a = a*a%M;
		p >>= 1;
	}
	return res;
}

3.快速乘
109 * 109 >= 1018 在这种情况下需要使用快速乘的方法

typedef long long ll;
ksc(ll a,ll b)
{
	ll res = 0;
	while(b){
		if(b&1) res = (res+a)%M;
		a = 2*a%M;
		b >>= 1;
	}
	return res;
}





二、负数取模

9%10 = 1
(两个整数的取模)

-9%10 = 1 ⇐ ⇒ (-9 + 10)%10
11%(-10) = -9 ⇐ ⇒ (11 - 20)%(-10)

9%(-10) = -1 ⇐ ⇒ (9 - 10)%(-10)
11%(-10) = -9 ⇐ ⇒ (11 - 20)%(-10)
(一正一负的取模)

(-9)%(-10) = -9 ⇐ ⇒ 9%10
(-11)%(-10) = -1 ⇐ ⇒ 11%10
(两个数都为负数的取模)
[杭电7004](https://acm.hdu.edu.cn/showproblem.php?pid=7004)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值