核心:

首先移项,左边仅剩下ax + by,使用扩展欧几里得求解x和y,其右侧值应当满足能够整除gcd(a, b),接着用扩展gcd求解gcd(a, b)和c的参数,c的参数z将作为中间过程的答案,而gcd(a, b)的倍数将用来给前面求过的所有结果翻倍,以此类推。

方程有解当且仅当右侧常数c能够整除gcd(a, b, c, d……)。

代码:

#include <iostream>
#include <vector>using namespace std;typedef long long LL;int ex_gcd(int a, int b, int &x, int &y) {int xp, xpp, yp, ypp;int r, q;q = a / b, r = a % b;xpp = x = 0, ypp = y = 1;if (!r) return b;xp = x = 1, yp = y = -q;while (true) {a = b, b = r;q = a / b, r = a % b;if (!r) return b;x = xpp - xp * q;y = ypp - yp * q;xpp = xp, ypp = yp;xp = x, yp = y;}
}// 返回false表示无解
// 当所有元素的gcd无法整除常数c时,方程无整数解
const int LIM = 1e6 + 10;
int multi[LIM], ans[LIM], coefficient[LIM];
bool indeterEqualtion(int *coefficient, int *ans, int len, int c) {if (len == 1) {if (c % coefficient[0]) return false;ans[0] = c / coefficient[0];return true;}// initint g = ex_gcd(coefficient[0], coefficient[1], ans[0], ans[1]);for (int i = 2; i < len; i++)g = ex_gcd(g, coefficient[i], multi[i - 1], ans[i]);if (c % g) return false;int sufmul = 1;for (int i = len - 2; i; i--)sufmul *= multi[i], ans[i] *= sufmul;ans[0] *= sufmul;return true;
}int main(void) {ios::sync_with_stdio(false);coefficient[0] = 155;coefficient[1] = 341;coefficient[2] = 385;indeterEqualtion(coefficient, ans, 3, 1);for (int i = 0; i < 3; i++) {if (i) cout << ' ';cout << ans[i];}cout << endl;return 0;
}

【ICPC模板】多元一次不定方程(丢番图方程)求解相关推荐

  1. 多元一次不定方程的强力算法---同余筛数法

    1.求解多元一次不定方程 n元一次不定方程就是形如∑aixi = C的不定方程,与二元一次方程最大的区别是,系数增多,未知数增多.求取变得更复杂.但事实上,多元一次方程可以通过消元法来变换成已经完美解 ...

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

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

  3. python解多元多次方程组_多元一次不定方程解的个数

    #!/usr/bin/python3.6 # -*- coding: utf-8 -*- """ 多元一次不定方程解的个数 problem1: 将30条鱼放入10个桶中, ...

  4. php计算多元一次方程,C++实现的求解多元一次方程示例

    本文实例讲述了C++实现的求解多元一次方程.分享给大家供大家参考,具体如下: 注:这里计算的是n*n的等距矩阵,代码如下: #include #include #include #include us ...

  5. c语言 多元一次方程,C++实现的求解多元一次方程示例

    本文实例讲述了C++实现的求解多元一次方程.分享给大家供大家参考,具体如下: 注:这里计算的是n*n的等距矩阵,代码如下: #include #include #include #include us ...

  6. python解多元多次方程组_Python求解多重或非线性方程,python,多元,多次,方程组,线性方程组...

    背景: 如何使用python求解多元多次方程组或者非线性方程组. 原创内容,转载注明出处!请勿用于商业用途! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博 ...

  7. 多元一次不定方程解的个数

    链接:https://ac.nowcoder.com/acm/contest/553/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 不定方程求解c语言_事业单位考试备考之数量关系:不定方程的求解

    一.不定方程的定义 含有未知数的等量关系是方程,当未知数个数等于等量关系数的时候,称之为普通方程,如2x+3=8,当未知数个数大于等量关系数时,称之为不定方程,如7x+3y=8. 以x+y=3,这样的 ...

  9. 【ICPC模板】卡迈克尔函数

    目录 卡迈克尔函数 卡迈克尔数 卡迈克尔函数 定义函数λ(n)为: 当n为1, 2, 4或奇质数的幂.或奇质数的幂的二倍时,这一函数的函数值等于n的欧拉函数值:当n为2.4之外的2的幂时,这一函数的函 ...

最新文章

  1. Ubuntu查看硬件详细信息
  2. 通俗易懂地讲解 Java 的注解
  3. linux 下查mac
  4. Ubuntu18.04 CUDA与cudnn安装
  5. python基础语法-对文件的操作
  6. bootstrap 总结
  7. qml c++函数 slot_浅析Qt(C++),QML与HTML之间的交互
  8. VFP开发Dcom程序的注意事项
  9. C++辨析系列谈 [作者: 郑力群]
  10. 修改VS2017密钥
  11. 移动硬盘上装linux系统 Ubuntu
  12. 两场面试,一次心灵洗礼
  13. Markdown,你只需要掌握这几个
  14. Image.Save 方法
  15. USB扫码枪无焦点输入到指定页面、指定文件框中
  16. 互联网应用基础第一课:计算机的工作原理、了解计算机的硬件与系统
  17. Cycladic(基克拉泽斯文明)
  18. 2022-2028全球机器人底盘行业调研及趋势分析报告
  19. PCF8951读程序
  20. Linux克隆Mac地址一样,详解Linux系统中网卡MAC地址克隆方法

热门文章

  1. Java 是值传递还是引用传递
  2. SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装
  3. leetcode剑指offer4
  4. 最新干货get,手机相机项目的整体测试流程是怎样的?
  5. 乘新能源汽车产业发展东风,智能网联驶入快车道
  6. CISA必修列表未收录数十个已遭利用漏洞
  7. PL/SQL Developer中拼接超长clob字段sql示例
  8. 关于Mac 下载vscode 过于缓慢的解决办法,亲测有效
  9. 惠普总裁孙振耀的退休感言
  10. 贝壳和字节、城里与城外