阅读《密码学与网络安全》这本书,看到线性丢番图方程,就结合之前看到的一些算法,写了一个得到解的程序,加深理解。

也就把代码贴在这里:

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++实现相关推荐

  1. 2.4 线性丢番图方程

      线性丢番图方程Linear Diophantine equation,名字听得非常高大上的.但是实际上很简单的,线性丢番图就是下面这种形式的方程: ax+by=cax+by=c ax+by=c   ...

  2. 知识点 - 线性丢番图方程 Linear Diophantine Equations

    知识点 - 线性丢番图方程 Linear Diophantine Equations 解决问题类型: 对于不定方程(a,b,c是给定参数,x,y为系数) ax+by=cax + by = c ax+b ...

  3. 线性丢番图方程 --算法竞赛专题解析(21):数论

    本系列文章将于2021年整理出版.前驱教材:<算法竞赛入门到进阶> 清华大学出版社 网购:京东 当当   作者签名书:点我 公众号同步:算法专辑    暑假福利:胡说三国 有建议请加QQ ...

  4. 整除理论与线性丢番图方程相关

    一.整除的定义. 整除:对于两个自然数a,ba,ba,b,若存在一个自然数xxx满足ax=bax=bax=b,则称aaa整除bbb,记为a∣ba|ba∣b. 显然{N,∣}\{N,|\}{N,∣}构成 ...

  5. JAVA:实现线性丢番图方程求解器算法(附完整源码)

    JAVA:实现线性丢番图方程求解器算法 package com.thealgorithms.maths;import java.util.Objects;public final class Line ...

  6. 数论读书笔记——线性丢番图方程——解不定方程

    线性丢番图方程: 背景:当我们需要求解特定方程的整数解的时候,那么就得到了一个丢番图方程,这些方程是根据丢番图(diophantus)命名的.他写下了一些方程并将解限定在有理数域上.方程ax+by=c ...

  7. 扩展欧几里得算法 求解 丢番图方程

    丢番图方程: 有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行. a * x + b * y = c  ( 其中所有数均为整数, 已知 x, y, c )        例如:鸡兔同笼问 ...

  8. 【蓝桥杯】简单数论4——丢番图方程

    1.二元线性丢番图方程 方程ax +by = c被称为二元线性丢番图方程,其中a.b.c是已知整数,x.y是变量,问是否有整数解. ax + by= c实际上是二维x-y平面上的一条直线,这条直线上如 ...

  9. python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)

    水壶问题 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许: ...

最新文章

  1. mesh threejs 属性_Threejs构建mesh
  2. R语言中的%in%操作符是干什么的?
  3. mysql semi join_MySQL 通过semi join 优化子查询
  4. CentOS 7 安装报错:Cannot find a valid baseurl for repo: base/7/x86_6
  5. LeetCode Integer Break(整数拆分问题)
  6. CF949A LFYZOJ#111 Zebras
  7. 小程序中神秘的用户数据
  8. centos7同一服务器安装两个或多个Tomcat
  9. 视频控件VideoCapX的使用指南和常见问题合集
  10. 远程连接本地mongodb 数据库
  11. c语言能选无,【提问】求助,一个C语言选择执行题怎么都不能完美运行
  12. Python: PIL基本代码
  13. Hive 中日志的存放位置
  14. VB中Array函数
  15. minaRActivator三网完美解信号,支持IOS15.6
  16. 室内外地图切换(室内基于ibeacons三点定位)
  17. 吐血分享:QQ群霸屏技术教程之霸屏实施细则
  18. 又是一年推gal季(牛客OI周赛5-提高组)
  19. 电路分析 基尔霍夫定律 详解课堂笔记
  20. VCC(电源)和 GND(地)之间电容的作用

热门文章

  1. 《脑与语言认知 江铭虎》读书总结
  2. Search()函数使用方法
  3. 山东大学项目实训——解决微信小程序无法获得用户信息问题
  4. 下一代防火墙(NGFW)已死!
  5. 深入浅出GAN框架原理
  6. 一个网站做渗透测试对企业的安全性建议
  7. 抗疫逆行者网页作业 感动人物HTML网页代码成品 网页作业带JS下拉菜单 最美逆行者网页模板 致敬疫情感动人物网页设计制作
  8. 【NOIP2014】生活大爆炸版石头剪刀布
  9. 经常听到卡农吧,可是你知道卡农背后的含义么?
  10. 电脑硬盘坏了怎么修复