裴蜀定理

news/发布时间2024/8/25 20:19:49

定义

\(a,b\) 是不全为 \(0\) 的整数

1.对任意整数 \(x,y\),满足 \(\gcd(a,b)|ax+by\)

2.存在整数 \(x,y\) 使得 \(ax+by=\gcd(a,b)\)

证明

第一条

理解一下即可,比较好理解


第二条

  1. 若任何一个等于 \(0\),则 \(\gcd(a,b)=a\),这时定理显然成立

  2. \(a,b\) 均不等于 \(0\)

    由于 \(\gcd(a,b)=\gcd(a,-b)\),不妨设 \(a,b\)\(>0,a\geq b\)\(d=\gcd(a,b)\)

    对于 \(ax+by=d\),两边同时 \(\div d\),可得 \(a_1x+b_1y=1\),由于除以了 \(a,b\) 的最大公约数,所以此时 \(a,b\) 互质,转证 \(a_1x+b_1y=d\)

    回顾 \(exgcd\) 中辗转相除的思想:

    \(\gcd(a,b)→\gcd(b,a\bmod b)→…\),将模出来的数称作 \(r\),则:

    \[\gcd(a_1,b_1)=\gcd(b_1,r_1)=\gcd(r_1,r_2)=…=\gcd(r_{n-1},r_n)=1 \]

    将上述式子转换为带余数的除法

    \[a_1=q_1b_1+r_1 \]

    \[b_1=q_2r_1+r_2 \]

    \[r_1=q_3r_2+r_3 \]

    \[… \]

    \[r_{n-3}=q_{n-1}r_{n-2}+r_{n-1} \]

    \[r_{n-2}=q_{n}r_{n-1}+r_n \]

    \[r_{n-1}=q_{n+1}r_n \]

    当辗转相除法除到互质时,\(r_n=1\),以 \(x\) 替换 \(q\),则有:

    \[r_{n-2}=x_nr_{n-1}+1 \]

    \[→1=r_{n-2}-x_nr_{n-1} \]

    将倒数第三个式子转化为 \(r_{n-1}=r_{n-3}-x_{n-1}r_{n-2}\),代入上式

    \[1=r_{n-2}-x_n(r_{n-3}-x_{n-1}r_{n-2}) \]

    \[→1=(1+x_nx_{n-1})r_{n-2}-x_nr_{n-3} \]

    然后通过同样方法消去 \(r_{n-2},…,r_1\)

    可证得 \(1=a_1x+b_1y\) 是一般式中 \(d=1\) 的情况

    同时乘以 \(d\),得 \(ax+by=d\)

推广

逆定理

\(a,b\) 是不全为 \(0\) 的整数,\(d>0\)\(a,b\) 的公因数,且存在整数 \(x,y\),使得 \(ax+by=d\) 成立,则 \(d=\gcd(a,b)\)

特殊的,当上述的 \(d=1\) 时,则 \(a,b\) 互质


多个整数

\(n\) 个整数的情形:设 \(a_1,a_2,…,a_n\) 是不全为 \(0\) 的整数,则存在整数 \(x_1,x_2,…,x_n\) ,使得 \(\sum\limits_{i=1}^{n}d_ia_i=\gcd(a_1,a_2,…,a_n)\)


其逆定理也成立:设\(a_1,a_2,…,a_n\) 是不全为 \(0\) 的整数,\(d>0\) 是她们的公因数,若存在整数 \(x_1,x_2,…,x_n\),使得 \(\sum\limits_{i=1}^{n}d_ia_i=\gcd(a_1,a_2,…,a_n)\),则 \(d=\gcd(a_1,a_2,…,a_n)\)

例题:

\(\Large{Border}\) \((vjudge)\)

简化题意:

给定序列 \(a\),求满足 \(r=(\sum\limits_{i=1}^{n}d_ia_i)\bmod k\)\(r\) 的个数和所有情况


解法

根据上述证明的裴蜀定理,得到序列 \(x\) 满足 \(\sum\limits_{i=1}^{n}x_ia_i=\gcd(a_1,a_2,…,a_n)\),且 \(\gcd(a_1,a_2,…,a_n)|\sum\limits_{i=1}^{n}x_ia_i\)

\(d=\gcd(a_1,a_2,…,a_n)\),于是设 \(\sum\limits_{i=1}^{n}x_ia_i=dl=kh+r\)

建立一个不定方程 \(dl=kh+r\),移项得 \(dl-kh=r\),用 \(x\) 替换 \(l\)\(y\) 替换 \(-h\),得到 \(dx+ky=r\)

根据裴蜀定理,方程有解当且仅当 \(\gcd(d,k)|r\)

于是得出 \(exgcd\) 的模型 \(dx+ky=r\)\(\gcd(d,k)|r\),根据 \(exgcd\) 的推理过程,当最后一层时 \(x_n=0,y_n=1\),此时 \(r\) 最大,\(r=k\)

故此,在满足 \(\gcd(d,k)|r\) 的条件下,\(r\) 可以从 \(0\) 取到 \(k\)(每次+ \(\gcd(d,k)\)

所以共有 \(\dfrac{k}{\gcd(d,k)}\) 个满足的 \(r\),依次从 \(0\) 输出到 \(k\)(每次+ \(\gcd(d,k)\))即可,也就是第 \(i(1\leq i\leq \dfrac{k}{\gcd(d,k)})\) 个解为 \((i-1)\times \gcd(d,k)\)


代码如下

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=1;register char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
int a,n,k,ans;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
signed main()
{#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifread(n),read(k);ans=k;//此处注意!for(int i=1;i<=n;i++)read(a),ans=gcd(ans,a);cout<<k/ans<<endl;for(int i=0;i<k/ans;i++)cout<<i*ans<<' ';
}

注意事项

可见代码中的一行 \(ans\) 初始化为 \(k\),已证 \(ans\) 必为 \(\gcd(d,k)\) 的整数倍数,否则方程无解,若没了这条,显然无法保证 \(ans\) 与这个 \(\gcd\) 中的 \(k\) 去满足

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/32108405.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

JavaWebDay6

数据库:存储和管理数据的仓库 数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件 SQL:Structer Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准 关系型数据库 SQL简介 注意-- 注释内容 --与注释内容之间…

Volcano 原理、源码分析(一)

0. 总结前置 1. 概述 2. Volcano 核心概念2.1 认识 Queue、PodGroup 和 VolcanoJob 2.2. Queue、PodGroup 和 VolcanoJob 的关系3. Volcano 调度框架概览 4. 源码分析4.1 Action 实现在哪里? 4.2 从 main 函数入手看调度器启动过程4.2.1 入口逻辑 4.2.2 NewScheduler() 方法 4…

记录--经常被cue大文件上传,忍不住试一下

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助大文件上传主要步骤:获取文件对象,切分文件 根据文件切片,计算文件唯一hash值 上传文件切片,服务端保存起来 合并文件切片,前端发送合并请求,服务端将文件切片合并为原始文件 秒传,对于已经存在的分片,可…

debezium+kafka实现mysql数据同步(debezium-connector-mysql)

1.情景展示 在企业当中,往往会存在不同数据库之间的表的数据需要保持一致的情况(数据同步)。 如何将A库a表的数据同步至B库a表当中呢?(包含:新增、修改和删除) 往往不仅仅需要保持数据的一致性,还要保证数据的即时性,即:A库a表的数据发生变化后,B库a表也能立刻同步变…

数据结构实验代码分享 - 3

哈夫曼编码/ 译码系统(树应用) [问题描述] 任意给定一个仅由 26 个大写英文字母组成的字符序列,根据哈夫曼编码算法,求得每个字符的哈夫曼编码。 要求: 1)输入一个由 26 个英文字母组成的字符串,请给出经过哈夫曼编码后的编码序列及其编码程度。(编码) 2)采用上一问题…

leetcode 2706 购买两块巧克力

leetcode 2706 购买两块巧克力题目: 2706 购买两块巧克力 思路:找两个最小值。 分情况讨论代码 class Solution:def buyChoco(self, prices: List[int], money: int) -> int:# 遍历一遍,找2个最小值# 找一个最小值我们都会。# 找次小值,就分两种情况,假设minPrice是最小…

开发商城小程序具有哪些模块和功能?(临沂软件定制开发-艾思软件)

随着移动互联网的发展,微信小程序已经成为了企业、商家和开发者的重要工具。商城小程序作为微信小程序的一种类型,为商家提供了一个全新的销售渠道。本文将详细介绍商城小程序的模块和功能,并附带相关代码。 一、商城小程序的模块首页模块:展示商城的热门商品、优惠活动等信…

01.Shiro基础概念以及快速入门

概述 Apache Shiro 是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话 Management 和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时可能非常复杂,甚至会很痛苦,但不一定如此。框架应尽可能掩盖复杂性,并公开干净直观的 API,以简化…

H5前端特殊艺术字体文件太大,可通过font-spider压缩

原理: 1.爬行本地 html 文档,分析所有 css 语句 2.记录@font-face语句声明的字体,并且记录使用该字体的 css 选择器 3.通过 css 选择器的规则查找当前 html 文档的节点,记录节点上的文本 4.找到字体文件并删除没被使用的字符 5.编码成跨平台使用的字体格式 简而言之:就是爬…

H-ui JQuery 给单选按纽赋值不生效

H-ui JQuery 给单选按纽赋值不生效 $("#sex-1").attr(checked,true)原因,iradio-blue 样式的原因 把下面代码注释掉就可以了 $(.skin-minimal input).iCheck({checkboxClass: icheckbox-blue,radioClass: iradio-blue,increaseArea: 20% });<div class="fo…

dockerfile多阶段构建最小镜像

如何将Go项目与Docker结合实现高效部署 原创 云原生Go 源自开发者 2023-12-29 07:00 发表于广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 56篇原创内容公众号在现代软件开发中,使用Docker部署应用程…

Spring Boot邮件发送教程:步步为营,轻松实现图片附件邮件!

通过Spring Boot构建一个功能强大的邮件发送应用程序,重点是实现发送包含图片附件的邮件。我将逐步介绍添加必要的依赖、创建邮件服务类和控制器的步骤,并提供了具体的示例源代码。跟随这个简单而清晰的教程,您将能够轻松地集成邮件发送功能到您的Spring Boot应用中。 步骤 …

汇编-压缩BCD的算术运算

(这里讨论的指令仅适用于32位模式下的编程。)压缩二进制编码的十进制整数,或者称为压缩的BCD整数, 在每个字节中存放两个十进制数字。回忆一下在第1章中讲到的关于二进制编码的十进制整数的内容。为了简化代码编写, 我们只使用无符号BCD数。数值以小端序存放,最低十进制数字…

InterSystems 数据库的存储过程存在哪里

我们都知道 InterSystems 的 Studio 可以创建存储过程。但这个存储过程我们保存的时候是保存在哪里? 存储逻辑 如果我们在 Studio 创建存储过程的话,存储过程是存储在数据库上面的。 本地文件夹中是没有存储的。 选择系统下面的存储过程,然后选择 Go 去查看系统中存储的存储…

自动查询12306余票,结果以txt形式放到nginx网站目录下

1 #!/bin/bash2 3 # yum install glibc-common jq4 5 6 date=2024-01-017 from=BJP8 to=HBB9 10 echo -en "$date from $from to $to \n查询时间:$(date)\n\n" > /usr/share/nginx/html/tmp.txt 11 echo -en "1(硬座) | 2(软座) | 3(硬卧) | 4…

羽毛球比赛规则

from random import random print(学号后两位:47) print(22信计1晁丽 ,2022310143047) def first(): print("这个程序模拟两个选手A和B的羽毛球竞技比赛") print("程序运行需要A和B的能力值(以0到1之间的小数表示)") def second(): a = float(input(&q…

西游记jieba分词

import jiebatxt = open("西游记.txt", "r", encoding=utf-8).read()words = jieba.lcut(txt) # 使用精确模式对文本进行分词counts = {} # 通过键值对的形式存储词语及其出现的次数for word in words:if len(word) == 1:continueelif word in ["大…

ArcGIS打开工具箱未响应问题

有时,打开工具箱的工具时,出现未响应的情况,主要以下规律: (1)所有工具都可能出现这种情况,与工具的功能无关; (2)不是每一次都会出现这样的情况; (3)从目录窗口中打开工具会出现这种情况,从ArcToolbox窗口打开不会出现。不知道是什么原因,遇到这种情况,一般把…

网络层路由技术

网络层路由技术 1、移动承载网络中的网络层协议 2G/3G的业务模式更多的是点到点的模式,直接实现基站和基站控制器之间的数据传递。 在4G LTE业务中, 第一,核心网侧的服务器集中化部署,基站允许在某个业务服务器出现故障之后同另外的服务器进行通信。第二,基站和基站之间的…

策略梯度

策略梯度呢,顾名思义,策略就是一个状态或者是action的分布,梯度就是我们的老朋友,梯度上升或者梯度下降。 就是说,J函数的自变量是西塔,然后对J求梯度,进而去更新西塔,比如说,J西塔,是一个该策略下预测状态值,也可以说是策略值,那么我们当然希望这个策略值越大越好…
推荐文章