• 数学基础


    互质:

    互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。互质数的写法:如c与m互质,则写作(c,m)= 1。

    判断方法:

    (1)两个不同的质数一定是互质数。
    例如,2与7、13与19。
    (2)一个质数,另一个不为它的倍数,这两个数为互质数。
    例如,3与10、5与 26。
    (3)1不是质数也不是合数,它和任何一个自然数(1本身除外)在一起都是互质数。如1和9908。
    (4)相邻的两个自然数是互质数。如 15与 16。
    (5)相邻的两个奇数是互质数。如 49与 51。
    (6)较大数是质数的两个数是互质数。如97与88。
    (7)两个数都是合数(二数差又较大),较小数所有的质因数,都不是较大数的约数,这两个数是互质数。
    如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。
    (8)两个数都是合数(二数差较小),这两个数的差的所有质因数都不是较小数的约数,这两个数是互质数。如85和78。85-78=7,7不是78的约数,这两个数是互质数。
    (9)两个数都是合数,较大数除以较小数的余数(不为“0”且大于“ 1”)的所有质因数,都不是较小数的约数,这两个数是互质数。如 462与 221
    462÷221=2……20,
    20=2×2×5。
    2、5都不是221的约数,这两个数是互质数。
    (10)减除法。如255与182。
    255-182=73,观察知 73182。
    182-(73×2)=36,显然 3673。
    73-(36×2)=1,
    (255,182)=1。
    所以这两个数是互质数。
    三个或三个以上自然数互质有两种不同的情况:一种是这些成互质数的自然数是两两互质的。如2、3、5。另一种不是两两互质的。如6、8、9。

    C++实现

    int gcd(int a,int b)
    {
        if(b==0)
            return a;
        else 
            return gcd(b,a%b);
    }
    if(gcd(a,b) == 1) printf("Yes");
    else printf("No");
    

    整除:

    a|b <=> b = ka ,a,b∈Z,且 a ≠ 0
    a|0.

    性质:

    • 传递性
      a|b, b|c, => a|c
    • a|b , a|c, 则 a|(k_1 * b + k_2 * c)

    [$ b = k_3 * a,c = k_4 * a ]

    k_1

    • a|b,b|a => |a| = |b|
      a != 0,b ≠ 0,

    [b = k_1 * a,a = k_2 * b,相乘 ]

    [a*b = k_1*k_2*a*b ]

    [1 = k_1 * k_2, ]

    [k_1 = k_2 = 1,或 k_1 = k_2 = -1, ]

    • b|a,c|a,(b,c) = 1 <=> b*c|a
      互质: 质因数分解/算数基本定理,(b,c) = 1,分解后没有相同的项

    [N = p_1^m_1*p_2^m_2*p_3^m_3...p_n^m_n ]

    x|N,
    y|N,
    xy 的质因数全出现在N的质因数

    [a = k_1 * b,a = k_2 * c, a = k_3 * b * c ]

    6|12,4|12,24 X 12

    • a|bc,(a,b)=1, => a|c
      b
      c = k*a
      a的质数中完全出现在c的质因数中

    质数:

    a > 1,a ∈ N*,a ≠ bc,b,c∈Z,b,c ≠ 1

    同余

    a = kb + r, 0 < r < |b|
    a ÷ b = k ... r
    r = a mod b <=> a % b
    a = kb - r <=> b|(a - r)
    (1 ~ 6) mod 3, 1,2,0,1,2,0
    a mod b = c mod b,
    => a ≡ c(mod b),a和c对模b同余

    • a ≡ b(mod p),c ≡ d(mod p) => a + c ≡ b + d(mod p)
      : p|a - b,p|c - d, => p|(a - b)+(c - d) => a+c ≡ b+d(mod p)
    • a ≡ b(mod m),c ≡ d(mod m)

    a + c ≡ b + d(mod m)
    a - c ≡ b - d(mod m)
    a × c ≡ b × d(mod m)

    • ad ≡ bd(mod md) <=> a ≡ b(mod m)
      :md|ad - bd => m|a - b

    乘法逆元
    a/b mod p = (ainv(b)) mod p
    b
    inv(b) % p = 1, inv(b) = x

    P1029 P1017 P1403

    辗转相除法(欧几里德算法)

    a可以表示成a = kb + r(a,b,k,r皆为正整数,且r<b),则r = a mod b
    假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。
    而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数,因此d|r
    因此d也是b,a mod b的公约数
    假设d是b,a mod b的公约数, 则d|b,d|(a-k*b),k是一个整数,
    进而d|a.因此d也是a,b的公约数
    因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

    Code

    int gcd(int a,int b){
    	return (b==0) ? a : gcd(b,a % b); 
    }
    int a,int b;
    while(b != 0){
    	int r=a%b;
    	a=b;
    	b=r;
    }
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    [leetcode]Remove Nth Node From End of List
    [leetcode]Palindrome Number
    [leetcode]Integer to Roman
    HDU 4709:Herding
    HDU 4708:Rotation Lock Puzzle
    HDU 4707:Pet
    HDU 4706:Children's Day
    SDUT 2411:Pixel density
    SDUT 2413:n a^o7 !
    SDUT 2409:The Best Seat in ACM Contest
  • 原文地址:https://www.cnblogs.com/Zforw/p/10543253.html
Copyright © 2020-2023  润新知