当前位置: 首页 > news >正文

裴蜀定理应用

裴蜀定理

  • 什么是裴蜀定理
  • 裴蜀定理的简单证明
  • 裴蜀定理推论
  • 题目洛谷P4549 【模板】裴蜀定理
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 题目分析
    • 参考代码

什么是裴蜀定理

对于不全为0的整数a,b,一定存在整数x,y,满足ax+by=gcd(a,b)对于不全为0的整数a,b,一定存在整数x,y,满足ax+by=gcd(a,b)对于不全为0的整数ab,一定存在整数xy,满足ax+by=gcd(a,b)
就比如2x+6y=82x+6y=82x+6y=8就有解,比如x=1,y=1或者x=4,y=0x=1,y=1或者x=4,y=0x=1,y=1或者x=4,y=0
2x+6y=12x+6y=12x+6y=1,就找不到对应的一组整数解

裴蜀定理的简单证明

设有整数x0,y0x_0,y_0x0,y0ax+byax+byax+by为最小正整数结果为ccc,即
ax0+by0=cax_0+by_0=cax0+by0=c
因为有
gcd(a,b)∣ax0,gcd(a,b)∣by0gcd(a,b)|ax_0,gcd(a,b)|by_0gcd(a,b)ax0,gcd(a,b)by0
所以
gcd(a,b)∣c(1)gcd(a,b)|c {\hspace{2em}} (1)gcd(a,b)c(1)
不妨设
a=kc+r(0≤r<c)a=kc+r(0 \le r < c)a=kc+r(0r<c)
就有
r=a−kc=a−k(ax0+by0)=a(1−kx0)+b(−ky0)=ax+by\ \begin {array}{rcl} r & = & a - kc \\ & = & a - k(ax_0 + by_0) \\ & = & a(1 - kx_0) + b(-ky_0) \\ & = & ax + by \end {array} \  r====akcak(ax0+by0)a(1kx0)+b(ky0)ax+by 
因为sss是最小的正整数,所以r=0r=0r=0
所以s∣a,同理s∣bs|a,同理s|bsa,同理sb
所以
s∣gcd(a,b)(2)s|gcd(a,b) {\hspace{2em}} (2)sgcd(a,b)(2)
(1),(2)(1),(2)(1)(2)可证s=gcd(a,b)s=gcd(a,b)s=gcd(a,b)

裴蜀定理推论

  • 对于ax+by=cax+by=cax+by=c,如果c满足gcd(a,b)∣cc满足 gcd(a,b)|cc满足gcd(a,b)c,那么该方程就有整数解,即
    线性方程𝑎𝑥+𝑏𝑦=𝑐有整数解,当且仅当gcd(𝑎,𝑏)∣𝑐线性方程 𝑎𝑥+𝑏𝑦=𝑐 有整数解,当且仅当 gcd(𝑎,𝑏)∣𝑐线性方程ax+by=c有整数解,当且仅当gcd(a,b)c
  • 一定存在整数X1⋯XiX_1 \cdots X_iX1Xi,满足
    ∑i=1nAiXi=gcd(A1,A2,A3⋯An)\sum_{i=1}^n A_iX_i=gcd(A_1,A_2,A_3 \cdots A_n)i=1nAiXi=gcd(A1,A2,A3An)
    如果有负数,可以加上绝对值,不会影响最终结果

题目洛谷P4549 【模板】裴蜀定理

题目描述

给定一个包含 nnn 个元素的整数序列 AAA,记作 A1,A2,A3,...,AnA_1,A_2,A_3,...,A_nA1,A2,A3,...,An

求另一个包含 nnn 个元素的待定整数序列 XXX,记 S=∑i=1nAi×XiS=\sum\limits_{i=1}^nA_i\times X_iS=i=1nAi×Xi,使得 S>0S>0S>0SSS 尽可能的小。

输入格式

第一行一个整数 nnn,表示序列元素个数。

第二行 nnn 个整数,表示序列 AAA

输出格式

一行一个整数,表示 S>0S>0S>0 的前提下 SSS 的最小值。

输入输出样例 #1

输入 #1

2
4059 -1782

输出 #1

99

说明/提示

对于 100%100\%100% 的数据,1≤n≤201 \le n \le 201n20∣Ai∣≤105|A_i| \le 10^5Ai105,且 AAA 序列不全为 000

题目分析

这个的本质就是求所有系数的最大公约数,可以从上文的裴蜀定理的推论知道

参考代码

#include<bits/stdc++.h>
using namespace std;
using ll =long long ;const int N=1e6;int gcd(int a,int b){return b?gcd(b,a%b):a;
}int main(){int n;cin>>n;int s=0;for(int i=1;i<=n;i++){int a;cin>>a;s=gcd(s,abs(a));}cout<<s;
}
http://www.dtcms.com/a/301282.html

相关文章:

  • Ubuntu Linux 如何配置虚拟内存 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录8
  • GRPO强化学习缓解多模态大模型OCR任务的幻觉思路及数据生成思路
  • 【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对
  • 【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
  • 【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧
  • linux 板卡实现vxi11服务
  • Qwen3安装使用教程:引领推理型大模型新时代
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-35,(知识点:三极管知识点,电路电压计算题,三极管电压计算,PNP三极管)
  • linux 部署 flink 1.15.1 并提交作业
  • 数据上新|最新省、地级市农业新质生产力2002-2025
  • Linux vimgrep 详解
  • 深度学习篇---优化器
  • 上位机知识篇---Tailwind CSS
  • Linux内核设计与实现 - 第15章 进程地址空间
  • python-列表推导式,迭代器和生成器,上下文管理器
  • Unity3D 平台宏定义
  • 双指针算法技巧
  • CCF-GESP 等级考试 2025年6月认证C++七级真题解析
  • PyQt5图形和特效(Qss的UI美化)
  • zabbix-agent静默安装
  • MinIO 用户管理与权限控制详解
  • LINUX727 磁盘管理回顾1;配置文件回顾
  • 数据类型处理流讲解
  • 《中国棒球》cba外援规则·棒球1号位
  • Java排序中(a).compareTo(b)与Integer.compare(a, b)区别
  • Java学习-------外观模式
  • incus套件在 主力 Linux Distros 上的安装配置与基本使用
  • 【NLP实践】三、LLM搭建中文知识库:提供RestfulAPI服务
  • LeetCode第349题_两个数组的交集
  • python 阿里云 安装 dashscope的简介、安装