codeforces1458A. Row GCD

https://codeforces.com/contest/1458/problem/A

本来以为数论只会GCD,结果gcd都不会了

这题关键是转化那个答案怎么求,gcd(a,b)=gcd(a-b,b)这是经典的辗转相除法依赖的基本性质

然后最后的答案就变成了gcd(a1+bj,a2-a1,a3-a1,an-a1)那么我们先把这这后面一坨求出来就行了

啊我好菜啊

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxl=3e5+10;

int n,m,k,cnt,tot,cas,ans;
ll a[maxl],b[maxl];
bool vis[maxl];
char s[maxl];

inline void prework()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<=m;i++)
		scanf("%lld",&b[i]);
	sort(a+1,a+1+n);
}


inline void mainwork()
{
	ll d=0;
	for(int i=2;i<=n;i++)
		d=__gcd(d,a[i]-a[1]);
	for(int i=1;i<=m;i++)
		printf("%lld%c",__gcd(d,a[1]+b[i])," \n"[i==m]);
}

inline void print()
{
	
}

int main()
{
	int t=1;
	//scanf("%d",&t);
	for(cas=1;cas<=t;cas++)
	{
		prework();
		mainwork();
		print();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/liufengwei1/article/details/114272349
Row
gcd