同余定理
(a + b) % m = (a % m + b % m) % m
(a * b) % m = ((a % m) * (b % m)) % m
在前面的快速幂中用到。以及在高精度取模中用到。
高精度取模即把高精度数看成各位数的权值与个位数乘积的和。
比如1234 = ((1 * 10 + 2) * 10 + 3) * 10 + 4,对这个数进行取余运算就是上面基本加和乘的应用。
代码如下
#include<stdio.stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;//把数用字符存起来
int b;
cin >> a >> b;
int len = a.length();
int ans = 0;
for(int i = 0; i < len; i++){
ans = (ans * 10 + a[i] - '0') % b;//同余定理
}
printf("%d\n",ans);
return 0;
}
逆元
对于整数a,p,若存在一个整数x,使ax≡1 (mod p)即ax%p=1成立,则称x是a对p的逆元(当且仅当gcd(a,p)=1时,才存在且存在唯一逆元),我们用inv(a)表示x
应用:求式子(a/b)%m的时候