zoukankan      html  css  js  c++  java
  • 清北学堂-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:反演  

  • 相关阅读:
    RDay2-Problem 2 B
    杭电 1862 EXCEL排序(sort+结构体)
    杭电 2803 The MAX(sort)
    杭电 5053 the Sum of Cube(求区间内的立方和)打表法
    杭电 2089 不要62
    杭电 4548 美素数(素数打表)
    杭电2098 分拆素数和
    杭电1722 Cake (分蛋糕)
    素数判定 (素数打表)
    最小公倍数
  • 原文地址:https://www.cnblogs.com/-Iris-/p/12510801.html
Copyright © 2011-2022 走看看