求最大公约数

用辗转相除法(欧几里德算法)

        static int Test(int i,int j)

        {

            if (i < j)

            {

                i = i ^ j;

                j = i ^ j;

                i = i ^ j;

            }


            int t;

            while (j != 0)

            {

                t = i % j;

                i = j;

                j = t;

            }


            return i;

        }

 

Stein算法(没有用到试商法,因此可以支持大素数运算)

        static int FOO(int i,int j)

        {

            if (i == 0) return j;

            if (j == 0) return i;

            if ((i & 1) == 0 && (j & 1) == 0) return 2 * FOO(i >> 1, j >> 1);

            else if ((i & 1) == 0) return FOO(i >> 1, j);

            else if ((j & 1) == 0) return FOO(i, j >> 1);

            else return FOO(Math.Abs(i - j), i < j ? i : j);

        }


posted on 2010-05-29 19:41  林大虾  阅读(280)  评论(0编辑  收藏  举报

导航