\(01.\)整除及证明
\(02.\) 特殊性质\(π(n) \approx n/logn\)
\(03.\) 质数有无穷多个
证明:
假设质数有最大数
令质数有\(n\)个,最大的质数为\(q_n\)
可构造一数 \(p=\)所有质数之积(\(q_1\times q_2\times q_3\times ……\times q_n\))
对于\(p+1\) 必然满足不整除于\(q_1,q_2,q_3,……,q_n\)
故\(p+1\)为质数 且\(p+1>q_n\)
所以没有最大的质数 假设不成立
\(04.\)所有大于2的质数都可以唯一地表示成两个平方数之差
证明:
大于2的质数都为偶数 即对于任意质数\(k>2\) 有 \(k \mod 2=1\)
而对于奇数k必有\(k=2m+1=(m+1 +m )(m+1 -m)=(m+1)^2-m^2\)
由此得证,且可同时证明两个平方数的差值为\(1\)
\(05.\)唯一分解定理
任意整数$ n = p_1^{a_1} \times p_2^{a_2} \times \cdots \times p_k^{a_k} $
因子个数 \(\tau(n) = (1 + a_1)(1 + a_2)(1 + a_3) \cdots (1 + a_k)\)
对\(m\)的唯一分解:$m=\prod_{c} p_c^{a_c} $
例题:LuoguP1075
核心代码:
bool prime(long long n)
{if(n==1) return false;if(n==2) return true; for(long long i=2;i<=sqrt(n);i++)if(n%i==0)return false;return true;
}
$06. $ 辗转相除: \(O(log n)\)/可重复贡献性
\(gcd(a,b)=gcd(a,b-ka) =>gcd(a,b)=gcd(a,b\)%\(a)\)
\(gcd(a,b,c)=gcd(gcd(a,b),gcd(b,c))\)
\(p.s.\)__ $ gcd() $ => \(STL自带最大公约数\)
例题: CF1562A
核心代码:
int k=r/2+1;if(k>=l)//case1//l在左边 cout<<r%k<<"\n";elsecout<<r-l<<"\n";
\(07.\) \(Stein\)算法:在高精度计算中避免取模
1.\(gcd(a,b)=gcd(a,a-b),a,b为奇数\)
2.\(gcd(a,b)=2*gcd(a/2,b/2),a,b为偶数\)
3.\(gcd(a,b)=gcd(a/2,b),a为偶数,b为奇数\)
4.\(gcd(a,b)=gcd(a,b/2),a为奇数,b为偶数\)
例题:LuoguP2152
注意:高精度要压位!!! 要不然过不了
其他套模板即可
\(08.\) \(gcd(a,b)\times lcm(a,b)=a \times b\)
\(p.s.\) \(lcm\)代码
int lcm(int a,int b)
{ return a/gcd(a,b)*b; }
例题:AT_abc152_e
暴力思路 (直接照搬过不了此题):
for(int i=1;i<=n;i++)
{cin>>a[i]; lcm=a[i]*lcm/__gcd(a[i],lcm);
}
\(09.\)埃氏筛
代码如下,复杂度\(O(n\) \(logn)\)
注意要学习埃氏筛的时间复杂度计算方法
vector<int> Prime;
bool isPrime[maxn];
void Sieve(int n)
{memset(isPrime,1,sizeof isPrime);isPrime[0]=isPrime[1]=0;for(int i=2;i<=n;++i){if(isPrime[i]) Prime.push_back(i);for(int j=i*2;j<=n;j+=i)isPrime[j]=0;}return;
}
\(10.\)欧拉筛
写法1:数组模拟 应用于\(n>1e7\) (我自己打的 有bug可以反映)
void ola()
{for(int i=2;i<=n;i++){if(vis[i]==0)prime[++cnt]=i;for(int j=1;j<=cnt&&prime[j]*i<=n;j++){vis[prime[j]*i]=1;if(i%prime[j]==0)break;}}
}
写法2:\(vector\)做法
void Sieve(int n)
{memset(isPrime,1,sizeof isPrime);isPrime[0]=isPrime[1]=0;for(int i=2;i<=n;++i){if(isPrime[i]){ Prime.push_back(i); }each(ver,Prime){ // 从小到大遍历已经筛出来的质数if(1ll*i*ver>n) break;isPrime[i*ver]=0;if(i%ver==0){ break; }}}
}
\(11.\) 同余
符号表示:\(a\equiv b(mod\) \(p)\)
01.若\(a \equiv b\)且\(c \equiv d\) \((mod\) \(m)\) 则\(a+c\equiv b+d(mod\) \(m)\)
02.若\(a \equiv b\)且\(c \equiv d\) \((mod\) \(m)\) 则\(ac\equiv bd\) \((mod\) \(m)\)
03.若\(a \equiv b\) \((mod\) \(m)\)且\(n \in N\) 则\(a^n\equiv b^n(mod\) \(m)\)
例题:LuoguP3861
核心思路:
一种状态转移
\(dp[i][j]=dp[i][j-1],a[i]\) \(\mid\) \(a[j]\)
另一种状态转移自己推 太长了不想打
12.费马小定理+乘法逆元
i.费马小定理
\(01.p\)为质数且\(gcd(p,\) \(a)=1\) 则\(a^{p-1} \equiv 1(mod\) \(p)\)
\(02.p\)为质数且\(gcd(p,\) \(a)=1\) 则\(a^{p} \equiv a(mod\) \(p)\)
ii.乘法逆元
\(01.\)定义: 若\(a \times v \equiv 1(mod\) \(p),\)则\(v\)为\(a\)在模\(p\)意义下的逆元
\(02.p\)为质数且\(gcd(p,\) \(a)=1\) 有\(a\)在模\(p\)意义下的逆元为\(a^{p-2}\)
证明:
$a^{p-1} \equiv1(mod $ \(p)\)(费马小定理)
有\(a \times a^{p-2} \equiv 1(mod\) \(p)\)
因为\(a \times v \equiv 1(mod\) \(p)\)
有\(v\)有一解为:\(a^{p-2}\)
求逆元代码:
const int mod = 998244353;
int qpow(int a,int b,int p=mod)
{int res=1,tmp=a;while(b){if(b&1) res=1ll*res*tmp%p;tmp=1ll*tmp*tmp%p;b>>=1;}return res;
}
int inv(int k){ return qpow(k,p-2,p); }
例题:Luogu P2613
思路:求逆元+取模即可