奇数、偶数、约数、质数、最大公因数、最小公倍数

奇数、偶数、约数、质数、最大公因数、最小公倍数概念及竞赛中常见定理

概念介绍

  1. 奇数
    定义:不能被2整除的整数,即形如 (2k+1)((k) 为整数)。
    例子:1, 3, 5, -7, 9 等。

  2. 偶数
    定义:能被2整除的整数,即形如 (2k)((k) 为整数)。
    例子:2, 4, 0, -6, 8 等。

  3. 约数(因数)
    定义:若整数 (a) 能被整数 (b) 整除(无余数),则 (b) 是 (a) 的约数。
    例子:6 的约数有 1, 2, 3, 6;8 的约数有 1, 2, 4, 8。

  4. 素数(质数)
    定义:大于1的自然数,且仅能被1和它本身整除。
    注意:素数与质数是同一概念的不同术语。
    例子:2, 3, 5, 7, 11;1不是素数。

  5. 最大公因数(GCD)
    定义:两个或多个整数共有约数中的最大值。
    计算:分解质因数后取共有质因数的最小指数乘积。
    例子:gcd(12, 18) = 6(12=2²×3,18=2×3²,取2¹×3¹)。

  6. 最小公倍数(LCM)
    定义:两个或多个整数的最小的公共倍数。
    计算:分解质因数后取所有质因数的最大指数乘积。
    例子:lcm(6, 8) = 24(6=2×3,8=2³,取2³×3)。


总结

奇偶性:整数按能否被2整除分为奇数和偶数。
约数/因数:描述整除关系的数,如6的约数是1,2,3,6。
素数/质数:特指只有两个正约数的自然数(>1)。
GCD & LCM:分别通过共有质因数的最小指数和最大指数计算,用于解决分数化简、周期问题等。

注意:术语“约数”与“因数”、“素数”与“质数”为同义词,在不同语境中交替使用。


以下是针对 奇数、偶数、约数、素数、最大公因数(GCD)、最小公倍数(LCM) 等概念的常见定理及其在编程竞赛中的应用,涵盖数论基础和经典算法:


1. 奇偶性

奇偶性判定定理
• 奇数:x & 1 == 1;偶数:x & 1 == 0(位运算快速判断)。
应用:快速判断数的性质,例如棋盘覆盖、数独合法性等。

奇偶性质定理
• 奇数 ± 奇数 = 偶数;偶数 ± 偶数 = 偶数;奇数 ± 偶数 = 奇数。
应用:构造数学问题中的矛盾条件(如无法排列成特定形式)。


2. 素数(质数)

埃拉托斯特尼筛法(Sieve of Eratosthenes)
定理:通过标记素数的倍数,高效筛选出 [2, n] 内的所有素数。
时间复杂度O(n log log n)
代码片段

  def sieve(n):
      is_prime = [True] * (n+1)
      is_prime[0] = is_prime[1] = False
      for i in range(2, int(n**0.5)+1):
          if is_prime[i]:
              for j in range(i*i, n+1, i):
                  is_prime[j] = False
      return [i for i, val in enumerate(is_prime) if val]

应用:预处理素数表,用于分解质因数、区间素数统计等。

米勒-拉宾素性测试(Miller-Rabin Primality Test)
定理:基于费马小定理和二次探测定理的随机化算法,高效判断大数是否为素数。
时间复杂度:单次测试 O(k log^3 n)k 为测试轮数)。
代码技巧:固定基数的确定性测试(如对 n < 2^64,选择特定基可确保正确性)。
应用:大数质数判断(如RSA加密)。


3. 约数(因数)

唯一分解定理(算术基本定理)
定理:每个整数 n > 1 可唯一分解为素数幂次乘积,如 n = p₁^a₁ × p₂^a₂ × ...
应用:快速计算约数个数、约数和、GCD/LCM等。

约数个数定理
公式:若 n = p₁^a₁ × p₂^a₂ × ...,则约数个数为 (a₁+1)(a₂+1)...
应用:求解因数数量问题(如求 n! 的因数个数)。

枚举约数的优化方法
定理:约数成对出现,只需遍历到 √n
代码片段

 def get_divisors(n):
     divisors = []
     for i in range(1, int(n**0.5)+1):
         if n % i == 0:
             divisors.append(i)
             if i != n // i:
                 divisors.append(n//i)
     return sorted(divisors)

4. 最大公因数(GCD)与最小公倍数(LCM)

欧几里得算法(辗转相除法)
定理gcd(a, b) = gcd(b, a % b),直到 b=0
时间复杂度O(log min(a, b))
代码片段

 def gcd(a, b):
     return a if b == 0 else gcd(b, a % b)

应用:分数化简、线段相交判断等。

扩展欧几里得算法(Extended Euclidean Algorithm)
定理:求解 ax + by = gcd(a, b) 的整数解 (x, y)
代码片段

 def extended_gcd(a, b):
     if b == 0:
         return a, 1, 0
     g, x, y = extended_gcd(b, a % b)
     return g, y, x - (a // b) * y

应用:求解线性同余方程(如 ax ≡ c (mod m))、模逆元计算。

贝祖定理(Bézout’s Identity)
定理:若 gcd(a, b) = d,则存在整数 x, y 使得 ax + by = d
推论ax + by = c 有解当且仅当 d | c
应用:判断方程是否有解,构造解集。

LCM与GCD的关系
公式lcm(a, b) = a * b // gcd(a, b)
应用:求多数的公共周期(如蚂蚁碰撞问题)。


5. 模运算与同余

费马小定理(Fermat’s Little Theorem)
定理:若 p 是素数,且 a 不被 p 整除,则 a^(p-1) ≡ 1 (mod p)
应用:快速计算模逆元(当 p 是素数时,a^{-1} ≡ a^{p-2} (mod p))。

欧拉定理
定理:若 an 互质,则 a^φ(n) ≡ 1 (mod n)φ(n) 为欧拉函数)。
应用:广义模逆元计算、RSA加密。

快速幂算法(Binary Exponentiation)
定理:通过二进制分解指数,快速计算 a^b mod m
代码片段

 def pow_mod(a, b, m):
     result = 1
     a = a % m
     while b > 0:
         if b % 2 == 1:
             result = (result * a) % m
         a = (a * a) % m
         b = b // 2
     return result

应用:大数取模、离散对数问题。


竞赛高频题型与技巧

  1. 素数相关
    • 区间筛法(如 [L, R] 内素数统计)。
    • 分解质因数优化(预处理素数表后试除法)。

  2. GCD/LCM相关
    • 多数的最大公因数/最小公倍数(迭代计算)。
    • 构造数组使得 gcdlcm 满足特定条件。

  3. 同余方程
    • 中国剩余定理(CRT)解线性同余方程组。
    • 扩展欧几里得解不定方程。

  4. 数论函数
    • 欧拉函数 φ(n) 的计算(利用质因数分解)。
    • 约数函数(如 σ(n) 表示约数和)。


总结

编程竞赛中,数论问题的核心是 快速实现数学定理的算法化,例如:
• 用 筛法 预处理素数表,
• 用 欧几里得算法 求 GCD 和逆元,
• 用 快速幂 处理大指数取模,
• 用 扩展欧几里得 解方程。

关键技巧:结合数学性质(如奇偶性、质因数分解)和位运算/递归优化代码效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值