zoukankan      html  css  js  c++  java
  • day2_ 数论

    研究整数有关的理论,研究取膜意义下的运算理论。

    1.枚举一个数的所有约数   o(sqrt(n))

    没啥好说的,直接代码。

    2.分解质因数

    就是从2开始枚举,如果这个没被去掉过,就把他的倍数全都消掉,这样我们每次取的时候都是这个数的质因数;一个数最多有一个>sqrt(n)的质因数,且这个质因数的指数最多是1。

    补充:

    算数基本定理:任何一个大于一的非质数N,N可以唯一分解成有限个质数的成绩,暨N=p1^q1*p2^q2*……*pk*qk;q1~qk均为正整数,p1~pk均为质数;

    3.一个数最多有多少个约数?

    由算数基本定理得每一个pi都有qi + 1种方法(不是q(i+1)),因为可以看成一个决策问题,每一个位置可选可不选,选的话选几个,这样就是每一位有qi+1种取法;暨n的约数和ans*=(qi +1)(1<=i<=k);

    4.1~n所有的数的因数个数和怎么表示,或者数量级是多少;O(n)

    以为有啥贼强的小结论啥的,经过两个巨佬吊打后,告诉我直接求出每一个数的因数个数和,然后加起来就行了???行吧。

    巨佬传送门:

    嗯,那么问题变成怎么求一个数的因数和。我们还得用到算数基本定理:

    我们知道一个数有多少个因数,那么我们把他加起来不就完了。

    Ans=(1+p1+p1^2+……+p1^q1)(1+ p2+p2^2+……+p2^q2)……(1+pk+pk^2+……+pk^qk);把这个式子拆开就是所有约数的和;

    5.怎么找1~n的所有素数

    欧拉线性筛

    6.最大公约数

    欧几里得算法(辗转相除,辗转相减);

    7.同余

    同余的基本运算:

    反身性:a≡a (mod m)

    对称性: 若a≡b(mod m),则b≡a(mod m)

    传递性: 若a≡b(mod m),b≡c(mod m),则a≡c(mod m)

    同余式相加:若a≡b(mod m),b≡c(mod m),则a ± c≡b ± d(mod m)

    同余式相乘:若a≡b(mod m),b≡c(mod m),则ac≡bd(mod m)

    线性运算:如果a≡b(mod m),c≡d(mod m),那么a ± c≡b ± d(mod m),且a * c≡b * d(mod m)

    除法:若ac ≡ bc (mod m) c≠0 则 a≡ b (mod m/gcd(c,m)) 其中gcd(c,m)表示c,m的最大公约数。特殊地 ,gcd(c,m)=1 则a ≡ b (mod m)

    幂运算:如果a ≡ b (mod m),那么a^n ≡ b^n (mod m)

    若a ≡ b (mod m),n|m,则 a ≡ b (mod n)

    若a ≡ b (mod mi) (i=1,2…n) 则 a ≡ b (mod [m1,m2,…mn]) 其中[m1,m2,…mn]表示m1,m2,…mn的最小公倍数

    求线性同余方程的解

    1.扩展欧几里得算法:

      对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。

       要求线性同余方程的解,首先要学会用扩展欧几里得算法求不定方程的最小解;

     未完待续……

  • 相关阅读:
    Java实现 LeetCode 761 特殊的二进制序列(括号问题)
    Java实现 LeetCode 757 设置交集大小至少为2(排序+滑动窗口)
    Java实现 LeetCode 757 设置交集大小至少为2(排序+滑动窗口)
    Java实现 LeetCode 757 设置交集大小至少为2(排序+滑动窗口)
    Java实现 LeetCode 756 金字塔转换矩阵(DFS)
    Java实现 LeetCode 756 金字塔转换矩阵(DFS)
    Java实现 LeetCode 756 金字塔转换矩阵(DFS)
    59. Spiral Matrix II
    169. Majority Element
    162. Find Peak Element
  • 原文地址:https://www.cnblogs.com/royal-8/p/9252377.html
Copyright © 2011-2022 走看看