The first blog

   第一篇,有些激动,也算一个新的开始吧。

   今天上午本来要考淘汰赛,但是老师虚晃一枪,说不考了,尽量为我们争取不淘汰一个人,其实我觉得不好,因为毕竟有些人喜欢耍游戏,哎,比如李皮皮,几乎每天都在耍,也是醉了。

  骑士:凯尔特人3:3,下一场天王山之战,抢七啊,LJ加油。   

  上午ypj讲了基本数论,还是可以。

下面给一些简单的代码嘛:

 拓展欧几里得

//ax + by = 1
//bx1 + (a%b)y1 = 1    ==>   bx + (a-a/b*b)y = 1
//  ==> ay1 + b(x1-a/b*y1) = 1
//对应  ax  + by         = 1
int egcd(int a, int b, int &x, int &y)
{
    if(b == 0)
    {
        x = 1; y = 0;
        return a;
    }
    int x1, y1;
    int e = egcd(b, a%b, x1, y1);
    x = y1;
    y = x1 - a / b * y1;
    return e;
}

最大公约数

int gcd(int a, int b)
{
    return b ? gcd(b, a%b) : a; 
}

最小公倍数

inline int lcm(int a, int b)
{
    return a / gcd(a, b) * b;
}

快速幂取模

int mul(int x, int y, int mod) // x^y % mod
{
    int res = 1;
    while(y)
    {
        if(y & 1) res = ((res % mod) * (x % mod)) % mod;
        x = ((x % mod) * (x % mod)) % mod;
        y >>= 1;
    }
    return res;
}



int mul(int x, int y) // x^y 
{
    int res = 1;
    while(y)
    {
        if(y & 1) res = res * x ;
        x = x * x ;
        y >>= 1;
    }
    return res;
}

筛素数

void make_prime_list(int m) // [1, m]   O(2N)
{
    for(int i = 2; i <= m; i++)
    {
        if(!flag[i]) pri[Cnt++] = i;
        for(int j = 0; j < Cnt && pri[j] <= m/i; j++)
        {
            flag[i*pri[j]] = 1;// i^2内的素数只筛选一次 
            if(i % pri[j] == 0) break;
        }
    }
}

 

posted @ 2018-05-26 14:58  那只憨态可掬的熊猫  阅读(105)  评论(0编辑  收藏  举报