Orac and LCM CodeForces - 1349A

原题链接
考察:推公式
思路:

\[gcd(lcm(a,b),lcm(a,c))==gcd(a,lcm(b,c)) \]

Code

#include <iostream> 
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 100010;
int a[N],n,R[N];
LL gcd(LL a,LL b)
{
	return b?gcd(b,a%b):a;
}
LL lcm(LL a,LL b)
{
	return (LL)a*b/gcd(a,b);
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=n;i>=1;i--) R[i] = gcd(R[i+1],a[i]);
	LL res= 0;
	for(int i=1;i<=n;i++)
	{
		LL t = lcm(a[i],R[i+1]);
		res = gcd(res,t);
	}
	printf("%lld\n",res);
	return 0;
}

posted @ 2021-06-19 12:16  acmloser  阅读(32)  评论(0编辑  收藏  举报