数论

数论

常见筛法

算术基本定理

对于任意正整数 \(A\),存在唯一集合 {\((p_1,q_1),(p_2,q_2),\dots,(p_n,q_n)\)} 满足 \(A=\prod^n_{i=1} {p_i}^{q_i}\),其中 \(p_i\) 是质数,\(q_i\) 是正整数。

\(\min(a,b)+\max(a,b)=a+b\)

\(\gcd(a,b)\times\operatorname{lcm}(a,b)=ab\)

埃氏筛

\(O(n \log\log n)\) 时间内预处理出 \([1,n]\) 内所有的质数。

\([2,n]\) 进行扫描,未标记则加入质数中,并把倍数标记为合数。

  • P7960 [NOIP2021] 报数

埃氏筛思想,将十进制含有 \(7\) 的数看为“类质数”。

  • P1835 素数密度

仍然考虑埃氏筛,扫描每个 \(\le \sqrt{R}\),并对其在 \([L,R]\) 内的倍数标记为合数。则该区间中剩下的未被标记的数即为质数。

这种方法被称为区间筛。

线性筛

\(O(n)\) 计算。

\(low(n)\) 表示 \(n\) 的最小质因子,对 \([2,n]\) 扫描,对于 \(i\),我们枚举所有 \(\le low(i)\) 的质数 \(j\),并将 \(ij\) 标记为合数。

发现 \(n\) 只会在 \(\dfrac{n}{low(n)}\) 处被标记,故总复杂度为 \(O(n)\)

bool f[MAXN];//1 合数 0 质数 
void Xprime(int n){
	f[1]=1;
	for(int i=2;i<=n;i++){
		if(flag[i]==0)//质数 
			prime[++sum]=i;
		for(int j=1;j<=sum&&i*prime[j]<=n;j++){//从已知质数枚举,注意范围 
			flag[i*prime[j]]=1;
			if(i%prime[j]==0) break;//i=kj(k>=0) 在 low(x) 即 j 处筛过了 
		} 
	}
} 

  • Problem 1

求对于 \([1,n]\) 中的每个数的质因子的个数。

\(d(i)\) 表示 \(i\) 的质因子个数,在线性筛时,直接将质数 \(p\)\(d(p)\) 设为 \(1\),并在从 \(i\) 转移得到 \(p_i\) 时令 \(d(p_i)=d(i)+1\),复杂度仍为 \(O(n)\)

欧拉函数

  • 互质

正整数 \(a,b\) 互质当且仅当 \(\gcd(a,b)=1\)

  • 欧拉函数

\(\phi(n)\) 表示 \([1,n]\) 中与 \(n\) 互质的数的个数。有\(n=\sum_{d|n} \phi(\frac{n}{d})\)

如果 \(\gcd(p,q)=1\),则 \(\phi(pq)=\phi(p)\phi(q)\),证明看图吧()

对于质数 \(p_k\),\(\gcd(a,p^k)=1\) 当且仅当 \(a\)\(p\) 的倍数,因此 \(\phi(p^k)=(p-1)p^{k-1}\)

模意义

光速乘

ll times(ll a,ll b,ll c){
ull t=(long double)a*b/c+0.5;
ll ans=(ull)a*b-t*c;
if(ans<0) ans+=c;
return ans;
}

逆元

模意义下的除法

\(a\) 的逆元是 \(a\) 在模意义下的倒数,逆元关系相互的。

威尔逊定理
对于质数 \(p\),有 \(1\times 2\times \dots \times(p-1)\equiv -1(\mod p)\)

费马小定理
\(p\) 为质数:

\(a^{p-1} \equiv 1(\mod p)\)

\(a^{-1} \equiv a^{p-2}\),用快速幂求

\(p\) 为合数:

欧拉定理

\(p \ge 2\)\(\gcd(a,p) =1\) ,则 \(a^(\phi(p)) \equiv 1(\mod p)\)

线性预处理逆元

  1. \(1\) 的逆元为 \(1\)
  2. \(p\)\(i\) 作带余除法,得到 \(p=qi+r(r<i)\)
  3. 将等式带入

inv[i]=fac[i-1]*ifac[i]

裴属定理
对于所有的 \(ai+bj\),最小的正整数为 \(\gcd(a,b)\)

posted @ 2024-05-02 15:38  CheZiHe929  阅读(6)  评论(0编辑  收藏  举报