2素数与合数

素数与合数

定义

设整数\(p\neq 0,\pm 1\)。如果p除了平凡约数外没有其他约数,那么称p为素数。

若整数\(a\neq 0,\pm 1\)且a不是素数,则称a为合数。

性质

  • 对于合数a,一定存在素数\(p\leq \sqrt{a}\)使得\(p|a\)
  • 素数有无穷多个
  • 所有大于3的素数都可以表示为\(6n+1\)的形式

算术基本定理

  1. 算术基本引理

设p是素数,\(p|a_1a_2\),那么\(p|a_1\)\(p|a_2\)至少有一个成立

  1. 算术基本定理(唯一分解定理)

设正整数a,那么必有表示:

\(a=p_1p_2 \dots p_n\)

其中\(p_j(1\leq j \leq s)\)是素数。并且在不计次序的意义下,该表示唯一。

  1. 标准素因数分解式

将上述表示中,相同的素数合并,可得:

\(a=p_1^{a_1}p_2^{a_2}\dots p_s^{a_s},p_1\lt p_2\lt \dots \lt p_s\)

称为正整数a的标准因数分解式。

素数计数函数

小于等于x的素数的个数,用\(\pi(x)\)表示。随着x的增大,会有这样的近似结果:

\[\pi(x) ~ \frac{x}{ln(a)} \]

素数判定

如何判断一个数是不是素数呢?

(1)暴力枚举

bool isPrie(int a)
{
    if(a < 2) return 0;
    for(int i = 2; i < a; i++)
        if(a % i == 0 ) return 0;
    return 1;
}

(2)缩小区间

很容易发现这样一个事实:如果 x 是 a的约数,那么$ \frac{a}{x}$也是 a的约数。

这个结论告诉我们,对于每一对 \((x, \frac{a}{x} )\)只需要检验其中的一个就好了。

bool isPrie(int a)
{
    if(a < 2) return 0;
    for(int i = 2; i * i <= a; i++)
        if(a % i == 0 ) return 0;
    return 1;
}

(3)利用性质

所有大于3的素数都可以表示为\(6n+1\)的形式

boolean isPrime(int num) {
    if (num <= 3) {
        return num > 1;
    }
    // 不在6的倍数两侧的一定不是质数
    if (num % 6 != 1 && num % 6 != 5) {
        return false;
    }
    int sqrt = (int) Math.sqrt(num);
    for (int i = 5; i <= sqrt; i += 6) {
        if (num % i == 0 || num % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}
posted @ 2025-07-18 20:10  星空丶star  阅读(90)  评论(0)    收藏  举报