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\)的形式
算术基本定理
- 算术基本引理
设p是素数,\(p|a_1a_2\),那么\(p|a_1\)和\(p|a_2\)至少有一个成立
- 算术基本定理(唯一分解定理)
设正整数a,那么必有表示:
\(a=p_1p_2 \dots p_n\)。
其中\(p_j(1\leq j \leq s)\)是素数。并且在不计次序的意义下,该表示唯一。
- 标准素因数分解式
将上述表示中,相同的素数合并,可得:
\(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;
}

浙公网安备 33010602011771号