首页 > 编程语言 >欧几里得(及其扩展算法)

欧几里得(及其扩展算法)

时间:2023-06-29 22:33:37浏览次数:54  
标签:prime a% gcd int 欧几里得 扩展 算法 ax

欧几里得算法

  • 算法内容
    计算两个数的最大公约数的算法,也叫辗转相除法。即:
    gcd(a,b)=gcd(b,a%b)。
  • 数学证明
    设gcd(a,b)=d,则必定有:d|a且d|b,则必定有d|(ax+by)而a%b=a-a/b*b,所以d|(a%b),则d必定为b和a%b的约数,并且a%b必定小于a则d必定为b和a%b的最大公约数。
    -代码实现
    优美,太优美了!
    给定n对数a,b,求它们的最大公约数。
#include<iostream>
using namespace std;
int find(int a,int b)
{
    return b?find(b,a%b):a;//优美 太优美了!!!!
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,b;
        cin>>a>>b;
        int res=find(a,b);
        printf("%d\n",res);
    }
    return 0;
}

扩展欧几里得算法

  • 算法作用
    数论中有对于一对正整数a,b,必定存在一对x,y使得ax+by=gcd(a,b),扩展欧几里得算法可以算出这一对x,y.
  • 算法内容
    求解ax+by=gcd(a,b),对于特殊的当b=0时有ax+by=gcd(a,0)=a,此时有x=1,y=0。当b\(\not=\) 0时,gcd(a,b)=gcd(b,a%b),设gcd(a,b)=d,则有:
    \(ax+by=bx^{\prime}+(a\%b)y^{\prime}=bx^{\prime}+(a-\frac{a}{b}*b)y^{\prime}=ay^{\prime}+b(x^{\prime}-\frac{a}{b}y^{\prime})\) 假如我们已经得到了\(y^{\prime}\)和\(x^{\prime}\)只需令\(x=y^{\prime},y=x^{\prime}-\frac{a}{b}y^{\prime}\),也在递归过程中相邻两个过程中将xy调换就只需令\(y=y-\frac{a}{b}x\).
  • 代码实现
    给定n对正整数a,b,对于每组都求出一对x,y,使得ax+by=gcd(a,b)
#include<iostream>
using namespace std;
int exgcd(int a,int b,int &x,int &y)//注意这里x.y都是引用
{
    if(b==0)
    {
        x=1,y=0;
        return a;
    }
    int d=exgcd(b,a%b,y,x);
    y=y-a/b*x;
    return d;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        int x,y;
        int res=exgcd(a,b,x,y);
        printf("%d %d\n",x,y);
    }
    return 0;
}
  • 代码细节
    这里传参的x,y都得使用引用,这样就可以对每一个形参x,y的改变就是对x,y的改变。

标签:prime,a%,gcd,int,欧几里得,扩展,算法,ax
From: https://www.cnblogs.com/Taco-gu/p/17515382.html

相关文章

  • MATLAB代码:基于粒子群算法的储能优化配置 关键词:储能优化配置 粒子群 储能充放电优
    MATLAB代码:基于粒子群算法的储能优化配置关键词:储能优化配置粒子群 储能充放电优化 参考文档:无明显参考文档,仅有几篇文献可以适当参考仿真平台:MATLAB平台采用粒子群实现求解优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:建立了储能的......
  • 电子凸轮追剪曲线生成算法
    电子凸轮追剪曲线生成算法。品牌:麦格米特(算法,理解后可转成其他品牌PLC或任何一种编程语言)只有程序原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/633554519425.html......
  • 音乐推荐系统 系统算法:基于用户的协同过滤推荐算法
    音乐推荐系统系统算法:基于用户的协同过滤推荐算法编程语言:python数据库:sqlite框架:MVCweb应用框架:Django解压就可以运行(自己需要有调试项目环境的能力),需要软件python和pycharm或者Anaconda项目有配套的文档原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/678695319073.......
  • 基于Matlab的主动配电网实时无功优化 考虑风电和光伏的接入,采用多目标粒子群算法,以网
    基于Matlab的主动配电网实时无功优化考虑风电和光伏的接入,采用多目标粒子群算法,以网损和电压偏差为目标,优化变压器分接头、无功补偿器实现24小时无功优化,算例采用IEEE33进行仿真分析,对优化前后的电压和网损进行了分析。这段程序主要是一个多目标粒子群优化算法(MOPSO),用于解决电力......
  • 基于粒子群算法的电力系统最优潮流 以IEEE30节点的六机为对象,建立考虑功率平衡、机组
    基于粒子群算法的电力系统最优潮流以IEEE30节点的六机为对象,建立考虑功率平衡、机组爬坡约束、出力限制约束的电力系统经济调度模型,采用粒子群算法对模型进行求解,得到六个机组的最优运行计划,确定系统最优运行成本。这段程序主要是一个基于粒子群优化算法(PSO)的电力系统调度程序。......
  • 文心一言 VS 讯飞星火 VS chatgpt (51)-- 算法导论6.2 3题
    三、当元素A[i]比其孩子的值都大时,调用MAX-HEAPIFY(A.i)会有什么结果?文心一言:当元素A[i]比其孩子的的值都大时,调用MAX-HEAPIFY(A,i)会将A[i]与其孩子中的最小值进行交换,并将A[i]视为新的根节点。这个操作会使得以A[i]为根节点的子树满足最大堆的性质,即根节点比其左......
  • 学不会的排序算法
    什么是排序所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法的评价标准(1)时间复杂度(2)空间复杂度(3)排序方式(4)稳定性废话不多说,我们直接开始吧选择排序选择排序(Selectionsort)是一种......
  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。"使用交叉验证算法和确定最佳隐含层节点个数的bp神经网络,可以通过编写注释清晰、效果清晰的Matlab程序来处理Excel格式的数据。这个方法可以帮助您快速上手,实现......
  • 锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况:HPPC 和 1C放电
    锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC验证工况:HPPC 和1C放电原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/673020484916.html......
  • 【改进蚁群算法】 蚁群算法 Dijkstra算法 遗传算法 人工势场法实现二维 三维空间路径
    【改进蚁群算法】蚁群算法Dijkstra算法遗传算法人工势场法实现二维三维空间路径规划本程序为改进蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划 算法实现:原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/636749258569.html1)基于MAKLINK图理论生成地图,并对......