【模板题】【数论】最大公约数GCD最小公倍数LCM——一道例题,两道练习

【模板】7592:求最大公约数问题

#include
#include
using namespace std;
int GCD(int a,int b)
{
	if (a>a>>b;
	cout<

最小公倍数LCM=a*b/GCD(a,b)

练习1:7828:最大公约数与最小公倍数:两个正整数的最大公约数是G,最小公倍数是L,它们的和最小是多少?

思路:和最小,则a和b的差理应最小。从sqrt(G*L)开始遍历a,一旦找到立马跳出。

注意:不能用j%g==0来判断,可能g不是i和j的最小公约数。所以必须用GCD判断!!!

#include
#include
using namespace std;
int GCD(int a,int b)
{
	if (a>g>>l;
	s=g*l;
	i=sqrt(s)+1;
	while(i>=1)
	{
		j=s/i;
		if (s%i==0 && GCD(i,j)==g && (i*j/GCD(i,j))==l)
		{
			m=i+j;
			break;
		}
		else i--;
	}
	cout<

练习2:8784:最大公约数和最小公倍数问题:求以x0为最大公约数,以y0为最小公倍数的数的对数

#include
#include
using namespace std;
int GCD(int a,int b)
{
	if (a>x>>y;
	for (a=x;a<=y;a++)
	{
		b=y*x/a;
		if (y%a==0 && GCD(a,b)==x && (a*b/GCD(a,b))==y )
			ans++;
	}
	cout<

 

你可能感兴趣的:(机考刷题)