Skip to content

Commit e6e784c

Browse files
authored
Add files via upload
1 parent b4d80db commit e6e784c

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

0000.test_project/congruence.h

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#ifndef CONGRUENCE
2+
#define CONGRUENCE
3+
4+
typedef long long ll;
5+
6+
/*
7+
* 操作a与b,且结果对mod求余
8+
* add : (a+b)%mod = (a%mod+b%mod)%mod
9+
* sub : (a-b)%mod = (a%mod-b%mod+mod)%mod
10+
* mul : (a*b)%mod = (a%mod)*(b%mod)%mod
11+
* div : (a/b)%mod = a*(b^(-1))%mod
12+
若mod为一个质数,则有 x^(-1)%mod=x^(mod-2)%mod,次方操作需要采用快速幂
13+
div :(a/b)%mod = (a%mod)*(b^(mod-2)%mod)%mod
14+
*/
15+
16+
long long quick_pow2_2(ll a,ll n,ll mod)
17+
{
18+
if (a==0)
19+
return 0;
20+
a%=mod;
21+
long long ans=1;
22+
while (n!=0)
23+
{
24+
if ((n&1)==1)
25+
{
26+
ans*=a;
27+
ans%=mod;
28+
}
29+
a*=a;
30+
a%=mod;
31+
n>>=1;
32+
}
33+
return ans;
34+
}
35+
36+
ll add_mod(ll a,ll b,ll mod)
37+
{
38+
return (a%mod+b%mod)%mod;
39+
}
40+
41+
ll sub_mod(ll a,ll b,ll mod)
42+
{
43+
return (a%mod-b%mod+mod)%mod;
44+
}
45+
46+
ll mul_mod(ll a,ll b,ll mod)
47+
{
48+
return (a%mod)*(b%mod)%mod;
49+
}
50+
51+
ll div_mod(ll a,ll b,ll mod)
52+
{
53+
//mod必须为质数
54+
return (a%mod)*quick_pow2_2(b,mod-2,mod)%mod;
55+
}
56+
#endif

0 commit comments

Comments
 (0)