素数、约数、反素数

title: 素数、约数、反素数
date: 2019-07-23 23:56:59
tags: 数论

一、素数

  • 0和1既不是素数也不是合数,最小的素数是2

(一)素数的判定:

试除法:如果自然数n不能被[2,√n] 内的所有素数整除,那么n是素数。

bool isPrime(int num)
	{
	if(num<=3)
	return num>1;
	
	//排除掉非 6x-1和6x+1的数
	if(num%6!=1&&num%6!=5) 
	return false;
	
	int cnt=(int)sqrt(num);
	for(int i=5;i<=cnt;i+=6)
	{
		if(num%i==0||num%(i+2)==0)//这里%i和%(i+2)  类似于表示5 和7 这样的倍数
					//由上知素数必然是6x-1或6x+1形式,然后再试除,排除有其他因子的
		return false;
	}
	return true;
	}

加速技巧:大于4的素数总是等于6x+1 或6x-1

如何证明?约数一定是成对出现的,d 和 n/d

min(d,n/d)<=√n

素数的几个性质

  1. 素数的个数无限多(不存在最大的素数)

  2. 存在任意长的一段连续数,其中的所有数都是合数(相邻素数之间的间隔任意大)

  3. 所有大于2的素数都可以唯一地表示成两个平方数之差。

  4. 当n为大于2的整数时,2n+1 和2n-1两个数中,如果其中一个数是素数,那么另一个数一定是合数。

  5. 如果p是素数,a是小于p的正整数,那么 a p − 1 % p = 1 a^{p-1} \% p = 1 ap1%p=1

参考链接:http://www.matrix67.com/blog/archives/234

费马小定理:
若p是素数,且a与p互质,则 ( a p ≡ a ( m o d    p ) ) (a^p≡a(mod\;p)) (apa(modp))
变形:(1) ( a p − 1 ≡ a ( m o d    p ) ) (a^{p-1}≡a(mod\;p)) (ap1a(modp)) (2) ( a p − 1 − 1 ≡ 0 ( m o d    p ) ) (a^{p-1}-1≡0 (mod\;p)) (ap110(modp))

费马小定理参考链接:http://www.360doc.com/content/17/1206/04/9482_710338732.shtml

比较容易理解的“无字证明”: (转自知乎)

  • 事实上,根据同余的性质,只要证明\(a^p≡a(mod p)\)对0<=a<=p-1成立,就可以得到上述定理。
    考虑一根有 p 颗珠子的项链,其每颗珠子有 a 种染色选择,所以总共$ (a^p) $种选择去给项链染色,结果中会有 a 根项链其所有的珠子颜色相同,而在剩下的项链中,总有 p 根其上色方式经过旋转是相同的(*)。
  • 所以 ( a p − a ) (a^p-a) (apa)会被 p 整除。

p 必须是质数的原因,实际上隐藏在被标记(*)的句子中

假设 p 不是质数,a=2 , p=4 。此时 p 与 a 有一个公因子 2 ,虚线左侧的项链理应有另外 3 个与它旋转等价的项链,然而事实上由于重复,只有 1 个,所以我们上面的论证对这种情形不成立。

把红色记为 A ,蓝色记为 B ,上例中的第一根项链可以记为 ABAB ,是由两个重复的 AB 组成;类似地,第二根可以记为 BABA 。事实上,把每根项链都记为一个字母序列 S ,如果 S 是由几个重复的字母序列 T 组成,且 T 不能拆分成更短的重复序列,那么所有关于 S 旋转等价的项链总数等于 T 的长度。易知T 的长度整除 S的长度,如果 T 的长度是素数 p ,那么 S 的长度也是素数 p ;因此关于 S 旋转等价的项链会有 p 根.

(二)素数筛选:

(1)素数埃式筛法(可能会重复筛)

算法思想:

  • 初始数列 :{2 、3,4,5,6,7,8,9,10 ,11 ,12 ,13 ,… ,n}

  • 输出 最小的素数 {2} ,筛掉 2的倍数,剩下 {3 ,5,7,9,11 ,13 ,…}

  • 输出 素数 {2,3} ,筛掉 3的倍数,剩下 {5 ,7,11 ,13 ,…}

  • 输出 素数 {2,3,5} {2,3,5} ,筛掉 5的倍数,剩下 {7 ,11 、13 ,…}

  • 继续以上步骤, 直到 n。

    时间复杂度:O(nlog log n)

    筛选次数:n/2+n/3+…+n/n

    调和级数: Σ i = 1 n 1 i = ln ⁡   n + γ + ε n \varSigma _{i=1}^{n}\frac{1}{i}=\ln\text{ }n+\gamma +\varepsilon _n Σi=1ni1=ln n+γ+εn

    素数分布: π ( x ) = x ln ⁡ x \pi \left( x \right) =\frac{x}{\ln x} π(x)=lnxx

(2)素数线性筛法(欧拉筛法)

每个合数仅被它最小的质因数筛去,时间复杂度为O(n)

const int maxn=1e7+5;
int primes[maxn];
int cnt;
bool st[maxn];//标记有没有被筛过 
void getPrimes(int n)
{
	fill(st,st+maxn,false);
	cnt=0;
	for(int i=2;i<=n;i++)
	{
		if(!st[i])//没有被筛过
		primes[cnt++]=i;
		for(int j=0;j<cnt&&i*primes[j]<=n;j++)
		{
			st[i*primes[j]]=true;
			if(i%primes[j]==0)//i是某个质数的倍数,就break掉,保证只被最小的质数筛一次 
			break;
		}	
	}	 
}

二、约数

若整数 n除以整数 d的余数为 0,即 d能整除 n,则称 d是n的约数 ,n是d的倍数,记为 d|n 。

唯一分解定理(算数基本定理): 任一大于 1的 自然数 𝑁,都可以唯一分解为有限个素数之积:

N = P 1 c 1 P 2 c 2 . . . P r c r N=P_{1}^{c_1}P_{2}^{c_2}...P_{r}^{c_r} N=P1c1P2c2...Prcr

N的正约数集合可写作: { p 1 b 1 p 2 b 2 . . . p m b m } \left\{p_{1}^{b_1}p_{2}^{b_2}...p_{m}^{b_m}\right\} {p1b1p2b2...pmbm},其中 0 ⩽ b i ⩽ c i 0\leqslant b_i\leqslant c_i 0bici

N的正约数个数 ( c 1 + 1 ) ∗ ( c 2 + 1 ) ∗ . . . ∗ ( c m + 1 ) = Π i = 1 m ( c i + 1 ) \left( c_1+1 \right) *\left( c_2+1 \right)*...*\left( c_m+1 \right) =\varPi_{i=1}^{m}\left( c_i+1 \right) (c1+1)(c2+1)...(cm+1)=Πi=1m(ci+1)

N的所有正约数之和为:

( 1 + p 1 + p 1 2 + . . . + p 1 c 1 ) ∗ ( 1 + p 2 + p 2 2 + . . . + p 2 c 2 ) ∗ . . . ∗ ( 1 + p m + p m 2 + . . . + p m c m ) = Π m i = 1 ( Σ j = 0 c i ( p i ) j ) \left( 1+p_1+p_{1}^{2}+...+p_{1}^{c_1} \right) *\left( 1+p_2+p_{2}^{2}+...+p_{2}^{c_2} \right) *...*\left( 1+p_m+p_{m}^{2}+...+p_{m}^{c_m} \right) =\underset{i=1}{\overset{m}{\varPi}}\left( \varSigma _{j=0}^{c_i}\left( p_i \right) ^j \right) (1+p1+p12+...+p1c1)(1+p2+p22+...+p2c2)...(1+pm+pm2+...+pmcm)=i=1Πm(Σj=0ci(pi)j)

三、反素数

  • 对于正整数x,其约数个数记作g(x),eg. g(1)=1,g(6)=4(1、2、3、6)

  • 如果某个正整数x满足:对任意正整数 i (0<i<x) 都有 g(x)>g(i),则称x为反素数(因子数最多)

  • 考虑x是小于n的最大反素数的情况:

    1. x一定是小于n的 约数最多的数

    2. 约数个数相同时,x一定是最小的数

      (因为x时反素数,就要满足g(x)>g(i)始终成立,如果x不是最小的数,如,当约数一样时,8,x,… 就会出现g(i)=g(x)的情况,那么x就不能被成为反素数了)

  • 反素数 x = p 1 e 1 p 2 e 2 . . . p r e r x=p_{1}^{e_1}p_{2}^{e_2}...p_{r}^{e_r} x=p1e1p2e2...prer的两个性质

    1. 质因子 p 1 , p 2 , . . . , p r , p_{1},p_{2},...,p_{r}, p1,p2,...,pr,从2开始连续的素数

      (eg. 504 = 2 3 3 2 7 1 504=2^33^27^1 504=233271,那么504一定不是反素数,因为在它前面一定能找到 360 = 2 3 3 2 5 1 360=2^33^25^1 360=233251是反素数)

    2. 质因子的指数递减 e 1 ≥ e 2 ≥ e 3 . . . ≥ e r e_{1}≥e_{2}≥e_{3}...≥e_{r} e1e2e3...er

      (eg. 3240 = 2 3 3 4 5 1 3240=2^33^45^1 3240=233451一定不是反素数,在它前面一定可以找到 2160 = 2 4 3 3 5 1 2160=2^43^35^1 2160=243351是反素数)

四、习题

素数距离 POJ2689

Aladdin and the Flying Carpet LightOJ1341

反素数 BZOJ1053

Summation of Four Primes UVA-10168 (素数)

阶乘分解 CH-3101 (分解质因子)

Deciphering Password HDU-2421 (约数个数+分解质因子)

未知剩余系 HDU-4542 (反素数)

五、相关链接

ACM常用模板

数论总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值