最小公倍数之和C/C++

题目描述
有N个正整数,求这N个正整数两两之间的最小公倍数之和。

输入说明
第1行 正整数N(N<=100)。
第2行 N个用空格分隔的正整数(每个正整数不超过10000)。

输出说明
输出这N个正整数两两之间的最小公倍数之和,结果对1000000007取模。

输入样例
4
2 3 7 6
输出样例
95

两个数的最小公倍数记为lcm(a,b),两个数最大公约数记为gcd(a,b)。
辗转相除法求最小公约数

有a*b=gcd(a,b)*lcm(a,b)

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include <algorithm>
#include<string.h>
#include<set>
#include<math.h>
#define llu unsigned long long
using namespace std;


int gcd(int x,int y)
{
	if(y==0)return x;
	else return gcd(y,x%y);
}

int lcm(int x,int y)
{
	return x*y/gcd(x,y);
}


int a[110];
llu s=0;


int main()
{
	//cout << fixed << setprecision(0);
	//cout << setw(8) << setiosflags(ios::left);
	int n;
	cin >> n ;
	
	for(int i=0;i<n;i++)
		cin >> a[i] ;
		
	for(int i=0;i<n-1;i++)
		for(int j=i+1;j<n;j++)
		{
			llu x=lcm(a[i],a[j])%1000000007;
			s=(s+x)%1000000007;
		}
		
	
	cout << s << endl ;	
		
	
	return 0;
}

上一篇:CF1473B String LCM 题解


下一篇:求n个数的最小公倍数和最大公约数