首页 > 其他分享 >线性丢番图方程

线性丢番图方程

时间:2024-08-06 20:27:44浏览次数:6  
标签:方程 return gcd int exgcd 丢番 线性 ax

线性丢番图方程定理

设 \(a,b\) 是整数且 \(gcd(a,b) = d\). 如果 \(d\) 不能整除 \(c\) , 那么方程 \(ax+by=c\) 没有整数解, 如果\(d\) 可以整除 \(c\), 则存在无穷个解. 另外, 如果 \((x_0,y_0)\) 是方程的一个特解, 那么所有解都可以表示为 :

\[x = x_0 + (\frac{b}{d})n, y = y_0 - (\frac{a}{d})n \]

即: \(ax+by=c\) 有解的充分必要条件是 \(d = gcd(a,b)|c\)
可借助如下图进行理解

扩展欧几里得算法与线性丢番图的解

求解 \(ax+by=c\) 的主要是找到一个特解, 那么 \(exgcd\) 的作用就是找到一个特解
其扩展欧几里得算法如下:

int exgcd(int a, int b, int &x, int &y){

    if(b == 0){

        x = 1, y = 0;

        return a;

    }

    int d = exgcd(b, a % b, y, x);

       y -= a / b * x;

    return d;

};

有时为了简化描述, 把 \(ax + by = gcd(a,b)\) 两边除以 \(gcd(a,b)\), 得到 \(cx + dy = 1\), 其中 \(c = \frac{a}{gcd(a,b)}\), \(d = \frac{b}{gcd(a,b)}\). \(c\) 与 \(d\) 是互素的, 则 \(cx + dy = 1\) 的通解为 \(x = x_0 + dn\), \(y = y_0 -cn\)
具体步骤如下:

例题: P1516 青蛙的约会 - 洛谷

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int N = 1e6 + 10, mod = 1e9 + 7;

int exgcd(int a, int b, int &x, int &y){

    if(b == 0){

        x = 1, y = 0;

        return a;

    }

    int d = exgcd(b, a % b, y, x);

       y -= a / b * x;

    return d;

};

signed main()

{

    std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

    int n, m, x, y, L; cin >> x >> y >> m >> n >> L;

    int a = n - m, b = L, c = x - y;

    if(a < 0) a = -a, c = -c;

    int d = exgcd(a, b, x, y);

    if(c % d != 0) cout << "Impossible" << '\n';

    else cout << ((x * (c / d)) % (L / d) + (L / d)) % (L / d) << '\n';

    return 0;

}
```![](/i/l/?n=24&i=blog/3205031/202408/3205031-20240806202623129-592127437.png)

标签:方程,return,gcd,int,exgcd,丢番,线性,ax
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/18345938

相关文章

  • F.grid_sample和双线性插值
    详解torch.nn.functional.grid_sample函数:可实现对特征图的水平/垂直翻转_gridsample-CSDN博客 (对F.grid_sample的含义讲解的比较清楚)一文彻底弄懂PyTorch的`F.grid_sample`_pytorchgridsample-CSDN博客 (用清晰易懂的双线性插值示例介绍)pytorch中的F.grid_sample使用方法......
  • 【数值计算方法】线性方程组的迭代解法
    目录第6章线性方程组的迭代解法1.范数和条件数1.1向量和矩阵的范数1.2条件数和扰动分析2.基本迭代法2.1迭代法基本思路2.2雅可比迭代法2.3高斯–赛德尔迭代法2.4超松弛(SOR)迭代法第6章线性方程组的迭代解法graphLRA[迭代法]-->B[定常迭代法]A-->C[不定常迭......
  • 状态方程到传递函数
    现代控制理论中描述物体的运动用状态方程,在自动控制原理中则使用的是传递函数,他们之间通过什么方式转换呢?通过一个例子说明转换过程,假设一个系统如下:其中u表示输入,y表示输出,x表示中间的状态。求系统的传递函数需要用到拉普拉斯变换,将第一个等式和第二个等式进行拉普拉斯变换,则:......
  • 岭回归:解决多重共线性的利器
    文章目录什么是岭回归?岭回归的原理实现步骤代码实现结论在数据科学和统计建模中,我们经常遇到各种回归问题,尤其是在预测分析中。然而,当模型中的解释变量高度相关时,我们就会面临多重共线性的问题。这种情况下,传统的最小二乘法(OLS)可能不再适用,因为它会导致回归系数的估计......
  • 用于多元线性回归的梯度下降
    回顾w现在不是一个数字,而是长度为n的向量。b还是一个数字。j(w1,w2...,b)将更新为j(w,...,b)梯度下降的duibi区别:w和x是向量,且w变成了w_1,xi变成xi_1,这个只适用于j=1,所以我们要跟新参数,同时我们也将更新b。正规方程(Normalequation)用的不多,所以不作多的记录......
  • 机器学习-线性回顾
    线性回归线性回归1.简介2.线性回归问题求解3.欠拟合与过拟合线性回归1.简介"""简介: 定义: 利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式 公式: 见下图 分类: 一元线性回归: 目标值与一个因变量有关......
  • 线性表
    P5727#include<cstdio>#include<vector>usingstd::vector;intmain(){ intn;scanf("%d",&n); vector<int>ans;//定义一个里面元素是int类型的动态数组 //一般不用vector<char>vector<bool> //此时是没有ans[0]...的 while(n!=1){ ......
  • 【机器学习】线性回归和逻辑回归的关系以及LinearRegression、LogisticRegression两种
    引言线性回归和逻辑回归是机器学习中两种常用的回归分析方法,它们在应用、性质和目的等方面存在显著差异文章目录引言一、线性回归1.1定义与目的1.2公式与计算1.3应用场景1.4特点与要求二、逻辑回归2.1定义与目的2.2公式与计算2.3应用场景2.4特点与要求三、......
  • Luogu P1777 帮助 题解 [ 紫 ] [ 线性 dp ] [ 状压 dp ]
    帮助:大毒瘤!!!调了我2h,拍了我2h,最后没调出来,重写才AC。wdnmd。思路这题主要是线性dp,而状压dp只是最后在统计答案时的一个辅助。首先定义\(dp[i][j][k]\)为考虑前\(i\)本书,已经抽出来了\(j\)本,最后没被抽出来的一本书是高度\(k\)的最小混乱度。每次放入的书与最后一位......
  • Pytorch笔记|小土堆|P16-22|神经网络基本骨架、卷积层、池化层、非线性激活层、归一化
    torch.nnContainers是神经网络骨架,含6个类,最常用的是Module——BaseclassforallNNmodulesModule所有神经网络模型(子类)都必须继承Module(父类),Module相当于给所有的神经网络提供了模板,但可进行修改官方示例:importtorch.nnasnnimporttorch.nn.functionalasFclass......