扩展欧几里得extgcd

S32K144 UDSdoCAN 升级刷写实现笔记 本篇旨在描述如何开发“车规级”的软件升级程序,通过在S32K144平台上实现基于UDSdoCAN的刷写升级功能,带你一步步建立安全升级的“工程思维”,在这里既能收获经验还能获得工程源码、测试脚本,助你起飞,避坑提速! 阅读详情

简单写一下最大公约数: 对一个整数a来说,如果存在x使得a % x = 0(a除x,除得的商正好是整数而没有余数),就说x是a的约数,比如12的约数有1, 2,3,4,6,12

那两个数的最大公约数就是两个数a,b的公共的约数中最大的那个,如6的约数有1,2,3,6,那么6和12的最大公约数就是6; 8的约数有1,2,4,8,那么8和12的最大

公约数就是4.多个数的扩展就不说了.用得多的就是两个数之间的:

typedef long long ll;

ll gcd(ll a, ll b) {
    if (b) return a;
    return gcd(b, a%b);
}//欢迎拿去用,这写法简洁,而且绝对正确!

进入主题,扩展欧几里得:

/*
 * (1) source: 求整数x,y使得ax+by=1
 * 推导:如果gcd(a,b)!=1,那么不妨设gcd(a,b)=k(k>1)则原式变成k(x*(a/k) + y*(b/k))=1,其中由于
 * k是a,b公约数,a/k,b/k依然是整数,可以相见,一个大于1的整数乘以另一个整数是不可能等于1的,
 * 回到刚才,我们可以知道要使ax+by=1 必须有gcd(a,b)=1**********(1)
 * (2)事实上,一定存在整数对(x,y)使得ax+by=gcd(a,b),如果另gcd(a,b)等于1,就可以导出过程(1)
 * 设int extgcd(int a, int b, int& x, int& y)是求解该方程的函数,返回值为gcd(a,b).和gcd的定义:
 * int gcd(int a, int b) {
 * 	if (!b) return a;
 * 	return gcd(b, a%b);
 * }
 * 一样,我们可以递归地定义extgcd.
 * 假设已经求得了: bx'+(a%b)y'=gcd(a,b)的整数解x'和y'.再将a%b=a-(a/b)*b代入后就得到:
 * ay'+b(x'-(a/b)*y')=gcd(a,b)
 * 而当b=0时则有a*1+b*0=a=gcd(a,b)
 * 将上述过程转化成代码就是:
 * int extgcd(int a, int b, int& x, int& y) {
 * 	int d = a;
 * 	if (b != 0) {
 * 		d = extgcd(b, a % b, y, x);
 * 		y -= (a / b) * x;
 * 	} else {
 * 		x = 1; y = 0;
 * 	}
 * 	return d;
 * }
 * by. *花式*小冬摘自<<挑战程序设计竞赛>>
 */
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;

/****************************************/
typedef long long ll;
const int MAX = 7401;

/* ax + by = gcd(a,b) */
ll extgcd(int a, int b, int& x, int& y) {
	int d = a;
	if (b) {// --> if (b != 0) {
		d = extgcd(b, a%b, y, x);
		y -= (a/b) * x;
	} else {
		x = 1; y = 0;
	}
	return d;
}

int main() {
	int a, b, x, y;
	srand(unsigned(time(0)));//用系统当前时间为随机数种子
	while (!cin.eof()) {
		a = rand()%MAX;
		b = rand()%MAX;//随机生成a,b,其实我们完全可以筛选掉负数,但是没关系,这里看看就好了
		int _gcd = extgcd(a, b, x, y);
		printf("(%d, %d) matchs %d*%d + %d*%d = %d\n", x, y, a, x, b, y, _gcd);
		puts("......................................");
		cin.clear();
		cin.get();
	}
	return 0;
}


3D医学影像开发入门<一>:VS2019+DCMTK3.6.8编译及环境配置 3D医学影像开发入门:VS2019+DCMTK3.6.8编译及环境配置 阅读详情

相关推荐

CloudCompare点云滤波实战:三种植被去除技术的对比与应用

本文详细对比了CloudCompare中三种植被去除技术(低通滤波、CSF滤波和坡度法)的实战应用与效果。通过具体案例和参数优化建议,帮助用户根据地形特征选择最佳滤波方法,提升点云数据处理精度和效率,特别适用于复杂场景下的植被去除需求。

weixin_30689307的博客 84

gmpy2---一些用法

import gmpy2 gmpy2.mpz(n)#初始化一个大整数 gmpy2.mpfr(x)# 初始化一个高精度浮点数x d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n C = gmpy2.powmod(M,e,n)# 幂取模,结果是 C = (M^e) mod n gmpy2.is_prime(n) #素性检测 gmpy2.gcd(a,b) #欧几里得算法,最大公约数 gmpy2.gcdext(a,b) #扩展欧几里得算法 gmpy2.iroot(x,n) #x开..

ITgougou_的博客 2414

zynq7020的arm A9核降频实录

zynq arm9 cortex a9 降频

qq_40011737的博客 8765

gcd以及ex_gcd的总结

gcd()---表示最大公约数,常用方法是欧几里得算法 ex_gcd()---表示扩展欧几里得算法 定义1:a和b是两个不全为0的整数,称a与b的公因子中最大的为a和b的最大公约数,用gcd(a,b)来表示。 定义2:a和b是两个非0的整数,称a与b的公倍数中最小的为a和b的最小公倍数,用lcm(a,b)来表示。 最小公倍数与最大公约数之间的性质:     1、若a|m,b|m,那么lc

AC_Dream 2268

氮化镓GaN电机驱动实战:从器件原理到EPC驱动中心

电机驱动是工业自动化和电动交通的核心,功率器件的选择直接决定系统效率与可靠性。传统硅基IGBT和MOSFET在开关速度、损耗方面存在瓶颈,而氮化镓(GaN)作为宽禁带半导体,凭借高电子迁移率、低栅极电荷和近乎为零的反向恢复电荷,正成为电机驱动领域的热门选择。EPC建立电机驱动中心,提供完整的评估平台,覆盖从低压家电到中压伺服的应用场景。文章从GaN器件原理出发,对比传统硅器件,详解三相BLDC/PMSM驱动系统的搭建、栅极驱动与Layout设计、死区时间设置及参数计算实例,并分享测试中遇到的振铃、EMI等高

weixin_29168675的博客 323

保姆级教程:用OSSH免费版+FreeRADIUS+FreeAC NAC,从零搭建一套企业级无线Portal认证系统

本文提供了一套基于OSSH免费版、FreeRADIUS和FreeAC NAC的企业级无线Portal认证系统搭建教程。从环境规划、核心组件安装到认证策略与用户管理,详细介绍了如何利用开源工具构建高效、安全的认证体系,特别适用于预算有限但需求严格的企业场景。

weixin_27032989的博客 392

算法学习->gcd/extGcd/lcm

GCD、extGcd、LCM #include&lt;stdio.h&gt; #include&lt;string.h&gt; //1、直接调用库函数 //头文件:#include&lt;algorithm&gt; //__gcd(a,b) //2、 long long gcd(long long a,long long b){ return (b==0)?a:gcd(b,a%...

wuyileiju__的博客 544

Python 爬虫实战:爬取豆瓣读书评论并分析

摘要:本文以豆瓣读书《活着》评论数据为例,详细讲解Python爬虫开发与文本分析全流程。首先通过requests库爬取评论数据,解决分页、反爬等问题;然后利用BeautifulSoup解析页面提取评论内容、评分等核心信息;最后结合jieba进行关键词提取、snownlp完成情感分析,并通过可视化展示结果。分析显示该书评分以5星为主(占比70%),正面评论达82%,核心关键词为"活着""余华""生命"。全文包含完整代码与详细解析,帮助读者掌握非结构化

2503_91057718的博客 1497

扩展欧几里得算法(extgcd)

相信大家对欧几里得算法,即辗转相除法不陌生吧。 代码如下: int gcd(int a, int b){ return !b ? gcd(b, a % b) : a; } 而扩展欧几里得算法,顾名思义就是对欧几里得算法的扩展。 切入正题: 首先我们来看一个问题: 求整数x, y使得ax + by = 1, 如果gcd(a, b) != 1, 我们很容易发现原方程...

weixin_30437337的博客 303

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

跨越边界:用MessagePipe实现无缝的进程间通信

MessagePipe是一个用于.NET平台的消息传递库,它专注于简化异步消息处理和进程间通信。通过提供一系列易于使用的API,开发者可以快速搭建起稳定可靠的通信管道,支持多种传输协议(如TCP、Unix域套接字等),并内置了序列化/反序列化功能,使得跨语言和跨平台的数据交换变得轻而易举。为了方便序列化和反序列化操作,我们需要为每种消息定义对应的类或结构体,并标记属性。这样可以确保消息在发送方和接收方之间正确无误地传递。[Key0set;[Key1set;

墨夶的博客 816

密码学之模乘法逆元算法 欧几里得拓展算法 逆元 python java实现

实现模乘法逆元算法 一、实验目的 通过本实验使学生掌握最大公因子算法的实现、同余类中元素的乘法逆元的求解。 二、实验原理 本实验的准备知识包括最大公约数、模运算及其基本性质、互素等概念。 最大公约数:a和b的最大公约数是能够同时整除a和b的最大正整数,记为:gcd(a,b)或(a,b)。 互素的(既约的):满足 gcd(a,b)=1 的 a 和 b。 同余(模运算):设整数 a,b,n(n≠0),如果 a-b 是 n 的整数倍(正的或负的),我们就说 a≡b(mod n),读作:a 同余于 b

SKPrimin的博客 2341

手搓UDS Bootloader|全网独家复现0x10诊断会话控制、详解会话跳转规则与S3超时机制、助力ECU在线刷写、固件迭代、车规安全升级落地

在车载UDS诊断(ISO 14229)与Bootloader固件升级架构中,0x10诊断会话控制服务是所有高级诊断、固件刷写功能的前置核心与权限管控入口,属于UDS基础必实现服务。车载ECU通过分级会话模式,隔离常规故障诊断、高级标定、固件重编程等高、低权限操作,从协议层面保障车载电控系统的安全性与稳定性。多数嵌入式开发者开发UDS Bootloader时,仅简单实现会话切换报文应答,未吃透会话强制跳转规则、S3安全超时机制、会话权限绑定、APP在线刷写跳转逻辑。

getusushu的博客 465

扩展欧几里得(extgcd)

相信大家对欧几里得算法,即辗转相除法不陌生吧。代码如下:123int gcd(int a, int b){    return!b ? gcd(b, a % b) : a;}而扩展欧几里得算法,顾名思义就是对欧几里得算法的扩展。切入正题:首先我们来看一个问题:求整数x, y使得ax + by = 1, 如果gcd(a, b) != 1, 我们很容易发现原方程是无解的。则方程ax + by = 1有...

月殇 330

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

extgcd 扩展欧几里得算法模板

#include using namespace std; int extgcd (int a,int b,int &x,int &y){ int d = a; if(b != 0){ d = extgcd(b,a%b,y,x); y -= (a / b)*x; } else x=1,y=0

Draymonder‘s Blog 396

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

扩展欧几里得extgcd算法的个人基础理解 ax+by=gcd(a,b)

辗转相除法(欧几里得算法)的递归实现 int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } 扩展欧几里得算法是什么? 如果需要求解不定方程 ax+by=c(a.b.c均为正整数)的整数解 首先求其方程特解,设为x0,y0 假设l为a,b最大公倍数 则方程通解为 (t为参数) 那么,怎么求得方程的一个...

weixin_42026547的博客 1744

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hdu-2669 Romantic---扩展欧几里得

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2669 题目大意: 给定a b,求ax+by = 1是否有解,输出x为正数的最小的解 解题思路: a b互质才有解,下面的方法可求出最小正数的x的解 1 #include<bits/stdc++.h> 2 using namespace std; 3 type...

weixin_33720956的博客 131

51nod 1256 扩展欧几里得

给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。 Input 输入2个数M,N中间用空格分隔(1<=M<N<=10^9) Output 输出一个数K,满足0<K<N且K*M%N=1,如果有多个满足条件的,输出最小的...

weixin_30835649的博客 82

【poj2891】Strange Way to Express Integers

题意: 给出n个模方程x=a(mod r) 求x的最小解 题解: 这就是个线性模方程组的模版题- - 但是有一些要注意的地方 extgcd算出来的解x可能负数 要让x=(x%mo+mo)%mo 而且mo不是等于lcm(r1,r2) 而是r2/gcd(r1,r2) 代码: 1 #include <cstdio> 2 typedef long lon...

dee2784的博客 137

2019-10-6近期训练日志

看了逆元的求法,实现,及作用。逆元有三种求法:费马小定理,扩展欧几里得定理。 在数论中,如果一个数字 A 存在一个对 p 的逆元 x ,就可以写成 Ax≡1modp 的形式(此处 p 与 A 互质,若不互质,则不存在逆元)。 逆元的作用 我们知道 取余 的性质: 1,(a−b)%c=(a%c−b%c)%c ,2,(a+b)%c=(a%c+b%c)%c ,3,(a×b)%c=(a%c...

qq_43642142的博客 144

51nod_1247可能的路径

#include #include #include #include #include #include #include using namespace std; int t; long long a, b; long long c, d; long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x%y)

FollowWindD 387

扩展欧几里得求解同余方程(poj 1061)

设方程 ax + by = c , 若 gcd(a,b) 是 c的因子(记作gcd(a,b)|c)则方程有解,反之无解。 其中x0,y0是方程的一组特解 , d = gcd(a,b), poj1061模型转化为(n-m)* t + L * k = x - y ,其中t和k是未知参数,形同ax+by = c 的形式,用extgcd即可求出x的一个特解,再通过这个特解找到x的最小正整...

qq_41949535的博客 280

templete_extgcd

#include #include #include #include using namespace std; typedef long long LL; int extgcd(int a, int b, LL &d, LL &x, LL &y) { if (b == 0) { d = a; x = 1; y = 0; } else { extgcd(b,

李硕 995

模板--HihoCoder --1297--扩展欧几里得

HihoCoder --1297--扩展欧几里得 求最大公倍数与不定方程的解; LL gcd(LL a,LL b){ return b?gcd(b,a%b):a; } void extgcd(LL a,LL b,LL &x, LL &y){ if(b){ extgcd(b,a%b,y,x); y-=(a/b)*x; } ...

queque_heiya的博客 247

辗转相除法与扩展欧几里得

辗转相除法:求俩个数的最大公约数。 int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } 扩展欧几里得算法:是辗转相除法的扩展,求 ax+by=gad(a,b) 的解。 int extgcd(int a,int b,int&amp; x,int&amp; y){ int d = a; if(b!=0){ d...

qlp_123的博客 398
上一篇: toj1746How Many Sums
下一篇: toj2861_Divisors_线性时间内计算n前约数的总和
bit_line
博客等级 码龄12年 33粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值