欧几里得算法

欧几里得(辗转相除)算法

最大公因数gcd求法(辗转相除法)

易得:gcd(a,b)=gcd(ab,b)

多减几次得:gcd(a,b)=gcd(a%b,b)

对于边界 a=0,此时的 b 即是最大公约数。

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

exgcd(拓展欧几里得算法)

此算法可用于解不定方程和求非质数意义下的逆元):

方程:ax + by = c (a,b,c均为整数,求x,y的整数解)
核心思路:在求gcd的末状态求出xy,又因为有个天才脑洞大开发现可以顺着gcd递归回去,于是可以求出一组x,y的特解,再找通解的表达。

具体做法:
当c 不是 gcd(a,b) 的倍数,时无x,y整数解。(裴蜀定理)
否则:ax + by = k * gcd,可先求出x/k,y/k
gcd末状态:
a = gcd, b = 0。此时x=1,y
gcd的转移方法是:ax + by = gcd = bx' + (a - a/b * b)*y';(gcd的递归转移)
整理一下:x = x' - a/b * y', y = x'
递归回去可得一组x/k,y/k的整数解, 再乘上k就是一组x,y的特解

接下来就是求通解:
先令有解{x1,y1}{x2,y2}

ax1+by1=c
ax2+by2=c
a(x1x2)=b(y2y1)
gcd(a,b)a(x1x2)=b(y2y1)ab
(x1x2)=kb,(y2y1)=ka
整理一下:x1=kb+x2y1=y2kak,x2,y2x1,y1)
代码:

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

exgcd 求逆元:ax=1(modp)=>ax=1+pk=>axpk=1,然后解不定方程。

类欧几里得算法

给定 n,a,b,c ,分别求

i=0nai+bc, i=0nai+bc2, i=0niai+bc

先求第一个,后面两个的思路类似于第一个。为了方便,我们定义:

f(a,b,c,n)=i=0nai+bc 

整体思路:如果 a>cb>c,把 f(a,b,c,n) 转换成 f(amodc,bmodc,c,n),否则转化成类似于 f(c,cb1,a,m) 的形式。

具体做法:

对于 acbc 时:

f(a,b,c,n)=i=0nai+bc=i=0n(acc+amodc)i+(bcc+bmodc)c这一步是关键=n(n+1)2ac+(n+1)bc+i=0n(amodc)i+(bmodc)c=n(n+1)2ac+(n+1)bc+f(amodc,bmodc,c,n)

对于 a,b<c

f(a,b,c,n)=i=0nj=0ai+bc11=j=0an+bc1i=0n[jai+bc1]

转化右边的式子:

jai+bc1j+1ai+bcj+1ai+bcjc+cai+bjc+cb1<aijc+cb1a<i

为了方便表示,令 m=an+bc,则

f(a,b,c,n)=j=0m1i=0n[i>jc+cb1a]=j=0m1(njc+cb1a)=nmf(c,cb1,a,m1)

递归即可。O(nlogn)

对于

g(a,b,c,n)=i=0niai+bch(a,b,c,n)=i=0nai+bc2

同样的做法,可以得到:

对于 acbc

g(a,b,c,n)=g(amodc,bmodc,c,n)+acn(n+1)(2n+1)6+bcn(n+1)2

h(a,b,c,n)=n(n+1)(2n+1)6ac2+(n+1)bc2+n(n+1)acbc    +2acg(amodc,bmodc,c,n)+2bcf(amodc,bmodc,c,n)    +h(amodc,bmodc,c,n)

否则:

g(a,b,c,n)=12[mn(n+1)h(c,cb1,a,m1)f(c,cb1,a,m1)]h(a,b,c,n)=m(m+1)n2f(c,cb1,a,m1)2g(c,cb1,a,m1)f(a,b,c,n)

其中 m=an+bc.

吐槽一下:这玩意写起来是真史,要是不给我公式要我手推出来写代码,不知道得调到什么时候。

posted @   花子の水晶植轮daisuki  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js
点击右上角即可分享
微信分享提示