一、数论
1.唯一分解定理:
题目:[lightoj1341](https://vjudge.net/contest/234388#problem/G),
题解:点击打开链接
[POJ1730](https://vjudge.net/contest/234388#problem/F)
题解:点击打开链接
2.Eratosthenes筛法:
埃氏筛素数:
int m=sqrt(n+0.5);
memset(vis,0,sizeof(vis)); //vis[i]=0表示i是素数。
for(int i=2;i<=n;i++)
{
if(!vis[i])
for(int j=i*i;j<=n;j+=i)
{
vis[j]=1;
}
}
素数定理:π(x)~x/ln(x)
3.扩展欧几里得算法:
void gcd(int a,int b,int &d,int &x,int &y)//ax+by=gcd(a,b),d是gcd(a,b)
{
if(!b)
{d=a;x=1;y=0;}
else
{gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
结论1:若方程ax+by=c的一组整数解为(x0,y0),则它的任意整数解可以写成(x0+kb',y0-k1'),其中a'=a/gcd(a,b),b'=
b/gcd(a,b),k取任意整数。
结论2:设a,c,b为任意整数,g=gcd(a,b),方程ax+by=g的一组解是(x0,y0),则当c是g的倍数时,一组解为(x0c/g,y0c/g);当c不是g的倍数时无整数解。
题目:UVA 12169 :点击打开链接
题解:点击打开链接
4.同余模算术:
公式:(a+b)%n=((a%n)+(b%n))%n
(a-b)%n=((a%n)-(b%n)+n)%n
ab%n=(a%n)(b%n)%n
大整数取模:
scanf("%s%d",n,&m);
int len=strlen(n);
int ans=0;
for(int i=0;i<len;i++)
ans=(int)(((long long)ans*10+n[i]-'0')%m);
printf("%d\n",ans);
同余模方程:ax≡b(mod n)
a≡b(mod n)的含义是“a和b关于模n同余”,即a mod n =b mod n。不难得出,a≡b(mod n)的充要条件是:a-b是n的整数倍。
方程ax≡1(mod n)的解称为a关于模n的逆。当gcd(a,n)=1时,该方程有唯一解;否则,该方程无解。
若求最小正整数解,则x%(n/gcd(a,b))
例题:POJ 2115
题解:点击打开链接
5.Miller_Rabin测试大素数:
1 费马小定理: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)
费马小定理是p为质数的必要条件。
题目:UVA 10871
题解:点击打开链接
6.中国剩余定理(孙子定理):
设m1,…,mk是两两互质的正整数,那么对于a1,…,ak来说,一次同余方程组x≡ai(modmi),必有解
唯一解为 x=∑(1~k) Mi*ai*Mi^(-1)(mod m)
m=m1*m2*…mk,Mi=m/mi,Mi^(-1)为Mi对于模mi的逆.
求乘法逆元:MiMi^(-1)≡1(%mi),得到MiMi^(-1)+ymi=1然后扩欧,x就是Mi^(-1)模板:点击打开链接
例题:poj 1006
题解:点击打开链接
7.积性函数(f(ab)=f(a)f(b))
1️⃣ 欧拉函数φ(n),用于计算{1,2……n}与n互质的正整数个数
欧拉函数的定义:对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。
Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身)。
φ(n)=n-1 n为素数;φ(n)<n-1 n为合数 ;若m、n互质,则φ(mn)=φ(m)φ(n)
φ(n)是积性函数,但不是完全积性函数
p为质数,k为素数,则φ(p^k)=φ(p^k)=p^k-p^(k-1)=(p-1)p^(k-1)
欧拉定理:若n和a互质,则a^(φ(n))≡1(mod n)
推论:对于互质的a,n,满足a^(φ(n)+1)≡a(mod n)
费马定理:若a、p互质,则a^(p-1)≡1(mod p) (判断素数)
欧拉函数性质 1:∑φ(d)=n ,d与n互质
2:当n>1时,1……n中与n互质的整数和为nφ(n)/2
模板:点击打开链接
阶和原根:阶和原根
2️⃣莫比乌斯反演:入门