牛客挑战赛 47A 一道GCD问题 (gcd辗转相减法)
Posted quinn18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客挑战赛 47A 一道GCD问题 (gcd辗转相减法)相关的知识,希望对你有一定的参考价值。
文章目录
题目链接:一道GCD问题
题意:
给定一个长度为n的序列,给每个数都加上一个非负整数
k
k
k ,使得所有数的
g
c
d
gcd
gcd 尽可能大,如果有多个,输出最小的
k
k
k
题解:
由
g
c
d
(
x
,
y
,
z
)
=
=
g
c
d
(
x
,
y
−
x
,
z
−
y
)
gcd(x,y,z)==gcd(x,y−x,z−y)
gcd(x,y,z)==gcd(x,y−x,z−y)得
g
c
d
(
a
1
+
k
,
a
2
+
k
,
a
3
+
k
.
.
.
.
,
a
n
+
k
)
=
=
g
c
d
(
a
1
+
k
,
a
2
−
a
1
,
a
3
−
a
2....
)
gcd(a1+k,a2+k,a3+k....,an+k)==gcd(a1+k,a2-a1,a3-a2....)
gcd(a1+k,a2+k,a3+k....,an+k)==gcd(a1+k,a2−a1,a3−a2....)
所以让最小的加到它的倍数
即 k == (g-a1%g)%g
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
int a[N];
signed main()
int n;
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
sort(a+1, a+1+n);
int g=0;
for(int i=2; i<=n; i++) g=__gcd(g, a[i]-a[i-1]);
cout<<g<<" "<<(g-a[1]%g)%g<<endl;
return 0;
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
以上是关于牛客挑战赛 47A 一道GCD问题 (gcd辗转相减法)的主要内容,如果未能解决你的问题,请参考以下文章