工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1936|回复: 3

欧几里德算法的Java实现

[复制链接]
发表于 2007-4-24 16:32 | 显示全部楼层 |阅读模式
给定连个正整数mn,求他们的最大公因子(最大公约数),即能够同时整除mn的最大正整数。
1:【求余数】以nm,并令r为所得余数,我们将有(0≤r<n)。
2:【余数为零?】若r=0,算法结束,n即为答案。
3:【互换】置mnnr,并返回步骤E1
package com.hiany.test.utils.algorithm;
/**
*@author hexq
*@version1.0.0
*@date2007-4-20
*@CopyrightCopyright(c)2007
*/
publicclass MaxFeed{
    publicint getnum(int m,int n){
        int r=getleave(m,n);
        while(r!=0){
            int[] s=swapnum(m,n,r);
            m=s[0];
            n=s[1];
            r=getleave(m,n);
        }
        return n;
    }
    /**
     *<p>comments:取余数
     *          </p>
     *author  hexq
     *codingdate  2007-4-20
     *@paramm
     *@paramn
     *@return
     */
    privateint getleave(int m,int n){
        int r=m%n;
        return r;
    }
    /**
     *<p>comments:交换
     *          </p>
     *author  hexq
     *codingdate  2007-4-20
     *@paramm
     *@paramn
     *@paramr
     *@return
     */
    privateint[] swapnum(int m,int n,int r){
        m=n;
        n=r;
        int[] s=newint[2];
        s[0]=m;
        s[1]=n;
        return s;
    }
    /**
     *<p>comments:测试用例
     *          </p>
     *author  hexq
     *codingdate  2007-4-20
     *@paramargs
     */
    publicstaticvoid main(String[] args){
        MaxFeed maxFeed=new MaxFeed();
        int r=maxFeed.getnum(96,27);
        System.out.println("***********************************\n\n\n");
        System.out.println("                 "+r);
        System.out.println("***********************************");
        
    }
}
各位有没有其它更优的实现?
发表于 2007-4-24 17:04 | 显示全部楼层
从算法角度考虑?
减少函数调用算不算是一个“更优的实现”?
回复

使用道具 举报

 楼主| 发表于 2007-4-24 17:08 | 显示全部楼层
从时间复杂度考虑
回复

使用道具 举报

发表于 2007-4-24 17:26 | 显示全部楼层
对限定的“欧几里德算法”的实现,应该没有更多的优化空间了吧...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 10:24

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表