C#,最大公约数(GCD)斯坦因(Stein)算法的源代码

发布时间:2024年01月08日

Stein 算法或二进制 GCD 算法是计算两个非负整数的最大公约数的算法。
Stein 的算法用算术移位、比较和减法代替除法。

using System;
using System.Text;

namespace Legalsoft.Truffer.Algorithm
{
? ? public static class GCD
? ? {
? ? ? ? /// <summary>
? ? ? ? /// Function to implement Stein's Algorithm
? ? ? ? /// </summary>
? ? ? ? /// <param name="a"></param>
? ? ? ? /// <param name="b"></param>
? ? ? ? /// <returns></returns>
? ? ? ? public static int Stein_Algorithm(int a, int b)
? ? ? ? {
? ? ? ? ? ? if (a == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return b;
? ? ? ? ? ? }
? ? ? ? ? ? if (b == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return a;
? ? ? ? ? ? }

? ? ? ? ? ? int k;
? ? ? ? ? ? for (k = 0; ((a | b) & 1) == 0; ++k)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? a >>= 1;
? ? ? ? ? ? ? ? b >>= 1;
? ? ? ? ? ? }

? ? ? ? ? ? while ((a & 1) == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? a >>= 1;
? ? ? ? ? ? }
? ? ? ? ? ? do
? ? ? ? ? ? {
? ? ? ? ? ? ? ? while ((b & 1) == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? b >>= 1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (a > b)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? int temp = a;
? ? ? ? ? ? ? ? ? ? a = b;
? ? ? ? ? ? ? ? ? ? b = temp;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? b = (b - a);
? ? ? ? ? ? } while (b != 0);

? ? ? ? ? ? return a << k;
? ? ? ? }
? ? }
}


----------------------------------------------------------------------

POWER BY TRUFFER.CN

文章来源:https://blog.csdn.net/beijinghorn/article/details/123954307
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。