线性丢番图方程的C++实现
阅读《密码学与网络安全》这本书,看到线性丢番图方程,就结合之前看到的一些算法,写了一个得到解的程序,加深理解。
也就把代码贴在这里:
void exEuclidean(int a,int b,int &s,int &t){int r1 = a, r2 = b , s1 = 1, s2 = 0, t1 = 0, t2 = 1;//初始化int q,r; while(r2 > 0){q = r1 / r2;r = r1 - q * r2; //也就是r = r1%r2;r1 = r2;r2 = r;s = s1 - q * s2;s1 = s2;s2 = s;t = t1 - q * t2;t1 = t2;t2 = t; }//gcd(a,b) = r1; s = s1; t = t1;
}int gcd(int x,int y){return y == 0 ? x : gcd(y,x%y);
}
int main()
{int a,b,c;printf("请依次输入ax + by = c中的参数a,b,c!\n");scanf("%d %d %d",&a,&b,&c); //首先求出gcd(a,b),利用朴素欧几里得算法 int gcd_a_b = gcd(a,b);if(c % gcd_a_b != 0){printf("c不能整出gcd(a,b),该方程无整数解!\n");return 0; }else{ //会有无穷多个解 int a1 = a / gcd_a_b;int b1 = b / gcd_a_b;//这个时候a1和b1肯定互质了 int c1 = c / gcd_a_b;//变成解方程 a1 * x + b1 * y = c1//利用扩展的欧几里得算法求 a1 * s + b1 * t = 1(注意:1是a1和b1的gcd) int s,t;exEuclidean(a1,b1,s,t); //因为传引用,s和t得到解了//得到特解int x0 = c / gcd_a_b * s , y0 = c / gcd_a_b * t;printf("得到特解:%d 和 %d\n",x0,y0);printf("通解是 x = %d + k * %d 和 y = %d - k * %d,(k为任意整数)\n",x0,b1,y0,a1);}
}
线性丢番图方程的C++实现相关推荐
- 2.4 线性丢番图方程
线性丢番图方程Linear Diophantine equation,名字听得非常高大上的.但是实际上很简单的,线性丢番图就是下面这种形式的方程: ax+by=cax+by=c ax+by=c ...
- 知识点 - 线性丢番图方程 Linear Diophantine Equations
知识点 - 线性丢番图方程 Linear Diophantine Equations 解决问题类型: 对于不定方程(a,b,c是给定参数,x,y为系数) ax+by=cax + by = c ax+b ...
- 线性丢番图方程 --算法竞赛专题解析(21):数论
本系列文章将于2021年整理出版.前驱教材:<算法竞赛入门到进阶> 清华大学出版社 网购:京东 当当 作者签名书:点我 公众号同步:算法专辑 暑假福利:胡说三国 有建议请加QQ ...
- 整除理论与线性丢番图方程相关
一.整除的定义. 整除:对于两个自然数a,ba,ba,b,若存在一个自然数xxx满足ax=bax=bax=b,则称aaa整除bbb,记为a∣ba|ba∣b. 显然{N,∣}\{N,|\}{N,∣}构成 ...
- JAVA:实现线性丢番图方程求解器算法(附完整源码)
JAVA:实现线性丢番图方程求解器算法 package com.thealgorithms.maths;import java.util.Objects;public final class Line ...
- 数论读书笔记——线性丢番图方程——解不定方程
线性丢番图方程: 背景:当我们需要求解特定方程的整数解的时候,那么就得到了一个丢番图方程,这些方程是根据丢番图(diophantus)命名的.他写下了一些方程并将解限定在有理数域上.方程ax+by=c ...
- 扩展欧几里得算法 求解 丢番图方程
丢番图方程: 有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行. a * x + b * y = c ( 其中所有数均为整数, 已知 x, y, c ) 例如:鸡兔同笼问 ...
- 【蓝桥杯】简单数论4——丢番图方程
1.二元线性丢番图方程 方程ax +by = c被称为二元线性丢番图方程,其中a.b.c是已知整数,x.y是变量,问是否有整数解. ax + by= c实际上是二维x-y平面上的一条直线,这条直线上如 ...
- python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)
水壶问题 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许: ...
最新文章
- mesh threejs 属性_Threejs构建mesh
- R语言中的%in%操作符是干什么的?
- mysql semi join_MySQL 通过semi join 优化子查询
- CentOS 7 安装报错:Cannot find a valid baseurl for repo: base/7/x86_6
- LeetCode Integer Break(整数拆分问题)
- CF949A LFYZOJ#111 Zebras
- 小程序中神秘的用户数据
- centos7同一服务器安装两个或多个Tomcat
- 视频控件VideoCapX的使用指南和常见问题合集
- 远程连接本地mongodb 数据库
- c语言能选无,【提问】求助,一个C语言选择执行题怎么都不能完美运行
- Python: PIL基本代码
- Hive 中日志的存放位置
- VB中Array函数
- minaRActivator三网完美解信号,支持IOS15.6
- 室内外地图切换(室内基于ibeacons三点定位)
- 吐血分享:QQ群霸屏技术教程之霸屏实施细则
- 又是一年推gal季(牛客OI周赛5-提高组)
- 电路分析 基尔霍夫定律 详解课堂笔记
- VCC(电源)和 GND(地)之间电容的作用