C#求最大公约数: 欧几里得算法 vs 辗转相除法
温馨提示:这篇文章已超过374天没有更新,请注意相关的内容是否还可用!
目录
(图片来源网络,侵删)
1.最大公约数
2.欧几里得算法
3.辗转相除法
1.最大公约数
最大公约数(Greatest Common Divisor,GCD)是两个或多个整数共有的最大的能被无余地整除的数。例如,12 和 18 的最大公约数是 6。最大公约数可以通过辗转相除法、欧几里得算法(或更相减损术等方法)求解。
2.欧几里得算法
欧几里得算法(Euclidean Algorithm)是一种用于计算两个整数的最大公约数的高效算法,基于以下原理:如果 n1 和 n2 是两个整数,且 n1 > n2,那么 n1 和 n2 的最大公约数等于 n2 和 n1%n2 的最大公约数。这个算法会不断将较大的数替换为较小的数,并将较小的数替换为两者的余数,直到较小的数为 0,此时较大的数就是两个数的最大公约数。
// 欧几里得算法(Euclidean Algorithm)实现求最大公约数
namespace _138
{
class Program
{
public static float GreatestComDivisor(int n1, int n2)
{
int temp = Math.Max(n1, n2);//求两个数的最大值
n2 = Math.Min(n1, n2); //求两个数中的最小值
n1 = temp; //记录临时值
while (n2 != 0)
{
n1 = n1 > n2 ? n1 : n2; //使n1中的数大于n2中的数
int m = n1 % n2; //记录n1求余n2的结果
n1 = n2; //交换两个数
n2 = m; //记录求余结果
}
return n1;
}
static void Main(string[] args)
{
ArgumentNullException.ThrowIfNull(args);
while (true)
{
Console.Write("请输入第一个数:");
int n1 = Convert.ToInt32(Console.ReadLine());//记录第一个数
Console.Write("请输入第二个数:");
int n2 = Convert.ToInt32(Console.ReadLine());//记录第二个数
if (n1 * n2 != 0) //判断两个数中的一个是否为0
{
Console.WriteLine("最大公约数:" + GreatestComDivisor(n1, n2));
}
else
{
Console.WriteLine("这两个数不能为0。");
}
}
}
}
}
//运行结果:
/*
请输入第一个数:12
请输入第二个数:18
最大公约数:6
请输入第一个数:34
请输入第二个数:17
最大公约数:17
请输入第一个数:
*/
3.辗转相除法
辗转相除法(也称为更相减损术)。辗转相除法是一种用于计算两个整数的最大公约数的算法,基于以下原理:如果 a 和 b 是两个整数,且 a > b,那么 a 和 b 的最大公约数等于 b 和 a % b 的最大公约数。这个算法会不断将较大的数替换为较小的数,并将较小的数替换为两者的余数,直到较小的数为 0,此时较大的数就是两个数的最大公约数。
// 用辗转相除法计算两个整数的最大公约数
namespace _138_1
{
class Program
{
public static int GreatestComDivisor(int a, int b)
{
while (b != 0)
{
int remainder = a % b;
a = b;
b = remainder;
}
return a;
}
static void Main(string[] args)
{
ArgumentNullException.ThrowIfNull(args);
while (true)
{
Console.Write("请输入第一个数:");
int n1 = Convert.ToInt32(Console.ReadLine());//记录第一个数
Console.Write("请输入第二个数:");
int n2 = Convert.ToInt32(Console.ReadLine());//记录第二个数
if (n1 * n2 != 0) //判断两个数中的一个是否为0
{
Console.WriteLine("最大公约数:" + GreatestComDivisor(n1, n2));
}
else
{
Console.WriteLine("这两个数不能为0。");
}
}
}
}
}
//运行结果:
/*
请输入第一个数:12
请输入第二个数:18
最大公约数:6
请输入第一个数:34
请输入第二个数:17
最大公约数:17
请输入第一个数:
*/
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
