素数的一些神奇性质
(1)所有大于$2$的素数都可以唯一地表示成两个平方数之差。
证明如下:
(2)麦森数
如果$2^{p}-1$是素数,其中指数$p$一定也是素数。
证明如下:
原命题的逆否命题为:如果$p$不是素数,则$2^{p}-1$不是素数。
如果p不是素数,可以假设 $p=m\cdot n$
$2^p-1=(2^m)^{n}-1=(x-1)(x^{n-1}+x^{n-2}+...+1), x=2^m$
逆否命题成立,原命题成立。
拓展:
求$2^{p}-1$的位数,$2^{p}-1$和$2^{p}$的位数是相同的,因为$2^{p}$最后一个一定不为$0$,可以直接求$2^{p}$的位数。设$k=2^{p}$,根据$10^n$的位数为$n+1$,只要想办法把$k=2^{p}$中的底数$2$转换成$10$,指数$+1$就是位数了。根据$10^{log_{10}{2}}=2$,于是$k=(10^{log_{10}{2}})^p$,把$p$乘进去就是$k=10^{p\cdot log_{10}{2}}$,所以位数就是$p\cdot log_{10}{2}+1$(cmath中自带log10()函数)
(3)当$n$为大于$2$的整数时,$2^{n}+1$和$2^{n}-1$两个数中,如果其中一个数是素数,那么另一个数一定是合数。
证明如下:
$2^n$一定不能被$3$整除
如果$ (2 ^ {n} \% 3 == 1)$,则一定有:$2 ^{ n} - 1 \% 3 == 0$;
如果 $(2 ^ {n} \% 3 == 2)$,则一定有:$2 ^{ n} + 1 \% 3 == 0$;
也就是说,$2^{n}+1$和$2^{n}-1$中至少有一个是合数。
(4)大于$3$的素数一定是$6$的倍数$ ±1 $
证明如下:
素数$±1$必然是偶数,一定可以被2整除
素数除以$3$,如果余$1$,减$1$后余$0$,;如果余$2$,加$1$后余$0$,即可以素数$±1$后被$3$整除
结合上面两行,素数$±1$,一定可以被$6$整除
素数的判定
试除法
(1)普通
复杂度:$O(n)$
bool prime(int x){ //判断x是不是质数,是返回true,不是返回false if(x <= 1) return false; for(int i = 2; i < x; i ++){ if(x % i == 0) return false; } return true; }
(2)改进
复杂度:$O(\sqrt{n})$
bool prime(int x){ if(x <= 1) return false; for(int i = 2; i <= sqrt(x); i ++){ if(x % i == 0) return false; } return true; } //用乘法可以避免根号的误差 bool prime(