【模板】裴蜀定理

[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 }

猜你喜欢

转载自www.cnblogs.com/66dzb/p/11166288.html
今日推荐