清北学堂-day2

首先

我声明一下

上一篇博客我写错了

我懒得删了,你就不要再看那一篇了

1°:

逆元

gcd(a,m)=1

a*b=1(mod m)

b=a^(-1) (mod m)

a^(p-1)=1 (mod p)

a与a^(p-2) mod p 下互为逆元

a与a^(φ(m)-1)   mod m   互为逆元

 

 

线性求逆元

int[i] mod p;

p = k * i + r;

0 = k * i + r ( mod p )

* i ^ ( - 1 )      * r ^ ( - 1 )

0 = k * r ^ ( - 1) + i ^ ( - 1 )  ( mod p )

i ^ ( - 1 ) = - k * r ^ ( - 1 ) 

i ^ ( - 1 ) = -[ p / i ] * inv [ r ]

 

 Exgcd

给定 a , b 

知道 gcd ( a , b ) = g

求  x , y

使 : x * a + y * b = g

 1 void exgcd(long long a,long long b,long long &x,long long &y){
 2     if(b==0){
 3         x=1;
 4         y=0;
 5         return;
 6     }
 7     exgcd(b,a%b,x,y);
 8     long long f=x;
 9     x=y;
10     y=f-y*(a/b);
11 }
Exgcd

算了,推导过程不便表述

 

 

中国剩余定理

正统做法:

 1 int intchina(int r)
 2 {
 3 int Mi,x,y,d,ans=0;M=1;
 4 for(int i=1;i<=r;i++) M*=m[i];
 5 for(int i=1;i<=r;i++){
 6     M[i]=M/m[i];
 7     exgcd(Mi,m[i],d,x,y);
 8     ans=(ans+Mi*x*a[i])%M; 
 9 }
10 return (ans+M)%M;
11 }
intchina

x = b_1  ( mod  m_1)

x = b_2  ( mod m_2 )

x = k_1 * m_1 + b_1 = k_2 * m_2 + b_2

k_1 * m_1  - k_2 *m_2 = b_2 - b_1

若 gcd ( m_1 , m_2 ) | b_2 - b_1 则有解

 

大数翻倍法 :

{

x % m_1 = b_1

x % m_2 = b_2

}

设m_1>m_2

b_1  b_1 + m_1  b_1 + 2 * m_1  b_1 + 3 * m_1  ...........  

c_1  c_2      c_3  .........c_n

 if   c_1 % m_2 = b_2 ->   x % lcm ( m_1 , m_2 ) = b + k * m_1

O( min ( m_1 , m_2 ) )  n越小速度越慢

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<iostream>
 4 using namespace std;
 5 inline long long py(long long a,long long b)
 6 {
 7     return a*b/__gcd(a,b);
 8 }
 9 
10 int main()
11 {
12     long long n,a[13],b[13],c,ans;
13     ios_base::sync_with_stdio(false);
14     cout.tie(NULL);
15     cin>>n;
16     for(int i=1;i<=n;i++)
17     {
18         cin>>a[i]>>b[i];
19     }
20     c=a[1];
21     ans=b[1];
22     for(int i=2;i<=n;i++)
23     {
24         while(ans%a[i]!=b[i]) ans+=c;
25         c=py(c,a[i]);
26     }
27     cout<<ans;
28     return 0;
29 }
k

 

 

积性函数:
若 gcd ( a ,b ) = 1 且f ( a , b )=f (a ) * f ( b )   则为积性函数

若取消该互素条件,则为完全积性函数

 

狄利克雷卷积:

定义:

( f * g ) ( n ) = Σ f ( d ) * g ( n / d )    d | n

f * g =g * f

( f * g) * h = f * ( h * g )

( f + g ) * h = f * h +g * h 

I ( n ) = 1

mu * I = epsilon ( epsilon ( n ) = [ n == 1 ])

phi * I = id ( id( n ) == n)

mu * id = phi

 

莫比乌斯反演:

g ( n ) = Σ  f ( d )

f ( n ) = Σ mu ( d ) * g ( n / d )

 

1:增加求和号

2:交换求和顺序

3:反演  

posted @ 2020-03-17 15:07  ·Iris  阅读(221)  评论(0编辑  收藏  举报