「AtCoder Grand018A」Getting Difference(GCD)

2020-06-02 15:42:46 浏览数 (1)

题目链接A - Getting Difference

题意

有n(1~(10^5))个数(A_i) (110^9),每次选两个数,将它们的差的绝对值加入这堆数。问k(1(10^9))是否可能出现在这堆数中。

题解

因为选择的数的差一定是这两个数的gcd的倍数,因此可以令g为所有数的gcd,那么g的不超过数组中最大值的倍数都是可以得到的。

代码

代码语言:javascript复制
#include <cstdio>
#define N 100005
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
}
int n,k;
bool ans;
int a[N];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;  i)
		scanf("%d",&a[i]),ans|=a[i]>=k;
	int g=a[1];
	for(int i=2;i<=n;  i)
		g=gcd(a[i],g);
	ans&=(k%g==0);
	puts(ans?"POSSIBLE":"IMPOSSIBLE");
	return 0;
}

0 人点赞