数论基础

费马小定理

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 && i*prime[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[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			else
			{
				phi[i*prime[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  阅读(387)  评论(2编辑  收藏  举报