基础数论

质数

质因数分解

算术基本定理:
1

N=p1c1p2c2...pmcm

cipip1<p2<...<pm

int primes[N], cnt[N], m;
void divide(int n)
{
	rep(i,2,n/i)
	{
		if(n%i==0)	primes[++m]=i;
		while(n%i==0)
		{
			n/=i;
			cnt[m]++;
		}
	}
	if(n>1)	
	{
		primes[++m]=n;
		cnt[m]=1;
	}
}

哪个if是不是多余?
并不是的之前我感觉那个if是多余的,直接用map去存可以省掉哪个if但是用map去存复杂度就变成了O(logn)

约数

gcd求最大公约数

gcd

gcd(a,b)=gcd(b,a%b)

下面证明该定理:
首先需要引入一些数论中用于证明的基本知识:
1.d|ad>=0:da
2.arq0<=r<n
a=qn+r
qq=anrr=amodn
n|ar=amodn=0
3.d|ad|yd|(ax+by)d|gcd(a,b)gcd(a,b)
证明:
如果能证明gcd(a,b)|gcd(b,a%b)gcd(b,a%b)|gcd(a,b)
gcd(a,b)=gcd(b,a%b)
q=gcd(a,b),p=gcd(b,a%b)
q=gcd(a,b)q|aq|bq|(ax+by)
a%b=akbgcd(b,a%b)=gcd(b,akb)q|gcd(b,a%b)
gcd(a,b)|gcd(b,a%b)
gcd(b,a%b)|gcd(a,b)
p|(xb+y(akb))p|(ay+(xk)b)p|ap|b
p|ap|bp|gcd(a,b)gcd(b,a%b)|gcd(a,b)

gcd(a,b)=gcd(b,a%b)

int gcd(int a, int b)
{
	return b?gcd(b,a%b):a;
}

未完待续......

posted @   cxy8  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
历史上的今天:
2022-12-22 剪枝
点击右上角即可分享
微信分享提示