原题:输入两个整数XY,X是M,N的最大公约数,Y的M,N的最小公倍数,求存在的M,N的组合。
using System;namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入最大公约数(整数):");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入最小公倍数(整数):");
int num2 = int.Parse(Console.ReadLine());
Console.WriteLine("所有M和N的组合有:");
for (int i = num1; i <= num2 + 1; i++)
{
for (int j = num1; j <= num2 + 1; j++)
{
if (Func1(i, j) == num1 && i*j/num1 == num2)//M*N=X*Y
{
Console.WriteLine(i+","+j);
}
}
}
Console.ReadKey();
}
/// <summary>
/// 求最大公约数
/// </summary>
/// <param name="p"></param>
/// <param name="q"></param>
/// <returns></returns>
public static int Func1(int c, int d)
{
int temp=0;
{
temp = c%d;
c = d;
d = temp;
}
return c;
}
}
}
利用辗转相除法求解最大公约数,他的具体做法如下:用小的数除大的数,再用出现的余数去除除数,再用出现的余数去除第一次得到的余数,这样一直反复计算,知道最后余数是0为止。最大公约数就是最后的除数。(求解最大公约数的方法就是按照这个思想来写的)