数论基础

费马小定理

P为质数 a为任意整数

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

线性筛

欧拉筛

for(int i=2;i<=n;i++)
{
if(!is_prime[i])
{
prime[++top]=i;
}
for(int j=1;j<=top && iprime[j]<=n;j++)
{
is_prime[i
prime[j]]=true;
cnt[i*prime[j]]++;
if(i%prime[j]==0) break;
}
}

欧拉函数

\(\phi(n)\)是n以内与n互质的输的个数 \(\phi(1)=1\)
是积性函数 但不是完全积性函数

\(\phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})\cdots(1-\frac{1}{p_k})\)

\(p_i\)是n的质因子

由积性函数得另一式子:

\(\phi(n)=p_1^{k_1-1}(p_1-1)*p_2^{k_2-1}(p_2-1)\cdots p_i^{k_i-1}(p_i-1)\) p为n的质因子

由上可以进行线性筛了

void get_phi()
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!is_prime[i]) prime[++top]=i,phi[i]=i-1;

for(int j=1;j<=top&&prime[j]i<=n;j++)
{
is_prime[i
prime[j]]=true;

if(i%prime[j]==0)
{
phi[iprime[j]]=phi[i]prime[j];
break;
}
else
{
phi[iprime[j]]=phi[i](prime[j]-1);
}
}
}
}

欧拉定理

n与a互质

\(a^{\phi(n)} \equiv 1 (\mod n)\)

若n为质数 则变为 费马小定理

扩展欧几里得算法

\(ax+by=\gcd(a,b)\)

一定有解
\(y_1=x_2-a/b*y_2\)
\(x_1=y_2\)

因为 \(\gcd(a,0)=a\)
所以 b=0时 显然 x=1,y=0

void exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return ;
}
exgcd(b,a%b,x,y);
int tmp=y;
y=x-a/b*y;
x=tmp;
}

求逆元

(不会逆元怎么打UR!)
求 m 在\(\mod p\) 意义下的逆元 p 为质数

扩展欧几里得算法求逆元

ax+by=1

a=m
b=p

mx+bp=1
取模 p 后 为 mx=1

所以x为m在模p下的逆元

费马小定理求逆元

因为 \(m^{p-1} \equiv 1(\mod p)\)
所以 \(m*m^{p-2} \equiv 1 (\mod p)\)

所以 \(m^{p-2}\) 就是m在模质数p下的逆元
快速幂即可


我数论太弱了 补了这一点点基础...

我乱打的一些 一些概念可能不对 哪里有错误 希望可以评论指出 谢谢

posted @ 2016-02-29 16:54  sxb_201  阅读(408)  评论(2)    收藏  举报