zoukankan      html  css  js  c++  java
  • 浴谷夏令营2017.8.1数论的整理

    知识点:

    1.整数

    1.1埃氏筛法:暴力枚举打表 O(nloglogn)

    1.2线性筛法:对于每个数x,遇到x%prime[i]==0的第一个i退出,使得每个合数都被它的最小质因子筛掉 O(n)

    例1.1H-合成数poj3292:暴力的一题 筛数打标记O(nlogn)

    例1.2求最小质数:平均每O(logn)会出现一个质数,于是暴力即可 O(sqrt(n)logn)

    1.3 辗转相除法

    gcd(a,b)=gcd(a-b,b)=gcd(b,a%b) 时间复杂度O(logn)

    ab=gcd(a,b)*lcm(a,b)

    二进制优化

     1 int gcd(int a,int b)
     2 {
     3     if(!a || !b)
     4       return a^b;
     5     int i=0,j=0;
     6     while(!(a&1))
     7       a>>=1,i++;
     8     while(!(b&1))
     9       b>>=1,j++;
    10     while(a!=b)
    11       {
    12        if(a<b)
    13          a^=b,b^=a,a^=b;
    14        a-=b;
    15        while(!(a&1))
    16          a>>=1;
    17       }
    18     return a<<min(i,j);
    19 }
    gcd二进制优化

    时间复杂度O(logn)不变,常数更小

    1.4 拓展欧几里得

    证明:

    要解ax+by=c

    设a’=b,b’=a%b,

    解出a’x’+b’y’=c

    即bx’+(a-[a/b]*b)y’=c

    即ay’+b(x’-[a/b]y’)=c

    所以x=y' y=x'-[a/b]y'

    递归到b==0时,x=1 y=0

     1 void exgcd(int a,int b,int c,int &x,int &y,int &p)
     2 {
     3     if(b==0)
     4       if(c%a==0)
     5         {
     6          x=c/a;
     7          y=0;
     8         }
     9       else
    10         p=-1;
    11     else
    12       {
    13        int xx,yy;
    14        exgcd(b,a%b,c,xx,yy,p);
    15        if(p==-1)
    16          return;
    17        x=yy;
    18        y=xx-a/b*yy;
    19       }
    20 }
    extgcd

    例1.3 gcd区间

    题目来源:洛谷1890

    dp+暴力

    时间复杂度O(n^2logn+m)

    例1.4 最大公约数和最小公倍数

    题目来源:洛谷1029

    质因数分解即可

    2.同余

    2.1 快速幂

    2.2 线性求逆元

    i^-1 ≡ -[p/i]*(p%i)^-1

    2.3 费马小定理

    若p是质数,则a^p-1 ≡1  (mod p)

    2.4 欧拉定理

    若(a,p)=1,则a^φ(p) ≡1  (mod p)

    2.5 快速求逆元

    extgcd或快速幂

    例2.1 青蛙的约会

    题目来源:poj1061

    同余方程,记得取最小解

    2.6 中国剩余定理

    解方程x ≡ai (mod pi),其中pi两两互质。

    记qij表示pi在模pj意义下的逆元。

    x ≡ Σ(ai*Σ(pj*qji)) (mod p1p2…pn)。

    例2.2 Biorhythms

    题目来源:poj1006

    典型的中国剩余定理

    3.积性函数

    3.1 积性函数

    如果对于任意正整数a,b,都有f(a)*f(b)=f(ab),则称f为完全积性函数。

    如果对于任意满足gcd(a,b)=1的正整数a,b,都有f(a)*f(b)=f(ab),则称f为积性函数。

    3.2 求欧拉函数

    线性筛法即可

    例3.1 Visible Lattice Points

    题目来源:poj3090

    模板题

    4.一些

    4.1 教堂

    有一个n*m的点阵,每个点可以走到8个方向上的点。

    水平或垂直方向上相邻的点之间的距离为1。

    你需要从某个点出发,遍历所有的点并回到起点。

    问最短路程。 n,m<=10000。

    诡异的一题,分类讨论奇偶性

    4.2 sumdiv

    题目来源:poj1845

    分解质因数+等比数列通项公式

    4.3 奶牛分厩

    题目来源:洛谷1154

    很巧妙的做法
    a%k==b%k等价于k|(a-b)
    然后给所有的xi-xj打标记
    之后用类似埃氏筛法的思想从大到小依次筛

    从大到小枚举i,如果i的倍数中存在一个数是因数,那么i也是因数。

    4.4 数列

    题目来源:洛谷1062

    二进制判断大小,k进制输出答案即可

    4.5 Hankson的趣味题

    筛到45000左右,依次判断每个质数即可

    4.6 GCD SUM

    考虑枚举k,求出gcd恰好为k的数对个数。

    不难发现gcd是k的倍数的数对个数是[n/k]2。

    把gcd是2k,3k,4k,….的个数扣掉就好啦。

    4.7 数三角形

    组合数+gcd

  • 相关阅读:
    架构中那些需要注意的事儿
    谈谈测试环境管理与实践
    响应式布局
    flex布局
    crontab定时任务
    SpringMVC Json自定义序列化和反序列化
    Tensorflow 使用TPU训练
    使用Selenium从IEEE与谷歌学术批量爬取BibTex文献引用
    Pyecharts——Python高级可视化
    Python图像处理库——PIL
  • 原文地址:https://www.cnblogs.com/w-h-h/p/7725824.html
Copyright © 2011-2022 走看看