using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Main
{
/*
假设x和y的最大公约数是m,最小公倍数是n,则xy=mn
分析:n=(x/m*y/m)*m=xy/m
1、公约数
公约数,亦称“公因数”。它是一个能被若干个整数同时均整除的 整数。
如果一个整数同时是几个整数的 约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。
求两个数最大公约数的方法
倍数关系
若较大数是较小数的 倍数,那么较小数就是这两个数的最大公约数。
互质关系
若这两个数是 互质数,那么它们的最大公约数就是1.
2、公倍数
公倍数(common multiple)指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。
公倍数举例
A和B A/B=C 如果A能被B整除,则A为B和C的公倍数
两个数A和B,它们的公倍数就是既是A的倍数又是B的倍数的数,即能同时被A、B整除的数
比如说:12和15,它们的公倍数是60,120,180,等等
在这些公倍数中最小的那一个就叫最小公倍数,就是60。
*/
class Program
{
public static bool IsEven(int number)
{
return number % 2 == 0;
}
public static int GetMax(int a, int b)
{
return a > b ? a : b;
}
public static int GetMin(int a, int b)
{
return a < b ? a : b;
}
static void Main(string[] args)
{
Console.WriteLine("请输入两个正整数:");
bool num1ok = int.TryParse(Console.ReadLine(), out int num1);
bool num2ok = int.TryParse(Console.ReadLine(), out int num2);
if (!(num1ok && num2ok))
{
Console.WriteLine("输入格式不正确!");
return;
}
int a = num1, b = num2, max = 0, min = 0;
if (a == b)
{
Console.WriteLine("最大公约数和最小公倍数都是:{0}", a);
return;
}
max = GetMax(a, b);
min = GetMin(a, b);
/*while (IsEven(a) && IsEven(b))//更相减损术算法
{
a = a / 2;
b = b / 2;
}
while (max - min != min)
{
a = min;
b = max - min;
max = GetMax(a, b);
min = GetMin(a, b);
}*/
while (max % min != 0)//辗转相除算法
{
a = min;
b = max % min;
max = GetMax(a, b);
min = GetMin(a, b);
}
Console.WriteLine("最大公约数是:{0},最小公倍数是:{1}", min, num1 * num2 / min);
Console.ReadLine();
}
}
}