再习拓展欧几里得算法

我们不妨先来复习一下欧几里得辗转相除法是怎么求两个数的最大公约数的

求 4453 和 5767 的最大公约数时,可作如下除法. 
5767÷4453=1 余 1314 
4453÷1314=3 余 511 
1314÷511 =2 余 292 
511 ÷292 =1 余 219 
292 ÷219 =1 余 73 
219÷73=3 于是得知,5767 和 4453 的最大公约数是 73。

证明:

设x,y的一个公约数是p,设b=x mod y;

再设x=ky+b;

因为 p | x,y;

又因为b=x-ky;

所以可以看出,p | b;所以p也是y,b的公约数。

还可以反证,假设p是y,b的公约数。

则有,p | y,p | x-ky(k是整数)

进而,p | x。

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

代码实现

int gcd(int a,int b)
{
    if(a==0)    return b;
    return gcd(b,a%b);
}

拓展欧几里得:对于不完全为0的非负整数a,b,若gcd(a,b)表示a和b的最大公约数,则必然存在整数对(x,y),是的gcd(a,b)=ax+by

证明:

当b=0,此时gcd(a,b)=a,则x=1,y=0;

当a>b>0

设gcd(a,b)=ax1+by1;gcd(b,a mod b)=bx2+(a mod b)*y

由欧几里得辗转相除法可知,

ax1+by1=bx2+(a-b*[a/b])*y2

合并同类项,得到方程右边化简为ay2+b(x2-[a/b]*y2)

由等式守恒可知,x1=y2,y1=x2-[a/b]*y2

代码实现:

inline int gcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    int r=gcd(b,a%b,x,y);
    int temp=x;
    x=y;    //x1=y2
    y=temp-a/b*y;   //y1=x2-[a/b]*y2
        return r;
} 

你当前这一层所用到的x2,y2就是上一层递归,即gcd(b,a%b)这一层的x1,y1。

明天补上exgcd的应用,快困死了

转载于:https://www.cnblogs.com/Patrickpwq/articles/9588957.html

内容概要:本文系统研究了基于CNN-SVM的卷积神经网络与支持向量机融合的数据分类预测方法,聚焦其在工业故障识别中的应用,提供了完整的Matlab代码实现。通过CNN提取输入数据的深层空间特征,再由SVM进行高精度分类,充分发挥两者优势,有效提升了故障识别的准确性、鲁棒性与泛化能力。该方法特别适用于处理电力系统、机械设备等领域的高维、非线性、强噪声监测数据,在变压器故障诊断、轴承缺陷识别等场景中具有重要应用价值。文档还整合了机器学、深度学、图像处理、路径规划、电力系统优化等多个前沿科研方向的技术资源,配套大量Matlab/Simulink仿真案例与Python代码,全面支持科研复现与工程实践。; 适合人群:具备一定编程基础,熟练掌握Matlab或Python语言,从事电气工程、自动化、人工智能、机械故障诊断等相关领域研究的研发人员及高校研究生; 使用场景及目标:① 实现工业设备的状态监测与多类别故障分类;② 深入理解CNN与SVM融合模型的设计原理与工程实现细节;③ 借助所提供的丰富算法案例开展科研复现、模型优化与系统仿真验证; 阅读建议:建议按照文档目录结构系统化学,结合百度网盘提供的完整代码资源进行动手实践,重点关注CNN特征提取层与SVM分类器之间的数据接口设计与参数调优策略,同时可延伸学文中涉及的其他智能算法及其在电力系统、信号处理等领域的交叉应用,全面提升科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值