C#,最大公约数(GCD)斯坦因(Stein)算法的源代码
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!