【模板】裴蜀定理

博客给出了一道题的链接,介绍解题思路为数论、最大公约数和不定方程。重点阐述了裴蜀定理,即ax + by = c(xy为任意整数)成立的充要条件是c是gcd(a,b)的倍数,并给出简要证明,多个数情况同理,还给出代码转载链接。

[Time Gate]

https://www.luogu.org/problemnew/show/P4549

【解题思路】

数论+最大公约数+不定方程

裴蜀定理内容及简要证明

ax+by=c(xy为任意整数)成立的充要条件是c是gcd(a,b)的倍数

s=gcd⁡(a,b),显然sa,并且s∣b

又因为x,y∈Z∗

所以s∣ax,s∣by

显然要使得之前的式子成立,则必须满足cab的公约数的倍数

又因为x和y是正整数

所以c必然是a,b,最大公约数

因此,证得该定理成立

多个数即可同理

【code】

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 int n,k,ans;
 6 inline int gcd(int a,int b){
 7     if(b==0)return a;
 8     return gcd(b,a%b);
 9 }
10 int main(){
11     //freopen("4549.in","r",stdin);
12     //freopen("4549.out","w",stdout);
13     scanf("%d",&n);
14     for(register int i=1;i<=n;i++){
15         scanf("%d",&k);
16         if(k<0)k*=(-1);
17         ans= gcd(ans,k);
18     }
19     printf("%d\n",ans);
20     return 0;
21 }

 

转载于:https://www.cnblogs.com/66dzb/p/11166288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值