回 帖 发 新 帖 刷新版面

主题:求两个数的最大公约数

我在书上看到的方法  输入两个数a,b 先比较大小 假设比较出较小的数b
然后 for i:=b downto 1 do
         if(a mod i=0) and (b omd i=0)
         then begin   
                write(i);readln;
                halt;
                end;
接下来是在网上看到求两个数的最大公约数的方法:  
                 
用辗转相除法求两个数的最大公约数的步骤如下:

先用小的一个数除大的一个数,得第一个余数;

再用第一个余数除小的一个数,得第二个余数;

又用第二个余数除第一个余数,得第三个余数;

这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。

例如求1515和600的最大公约数,

第一次:用600除1515,商2余315;

第二次:用315除600,商1余285;

第三次:用285除315,商1余30;

第四次:用30除285,商9余15;

第五次:用15除30,商2余0。

1515和600的最大公约数是15。

个人觉得第一种方法什么简单。  第二题不会编  所以请教下第二题到底怎么编~

最后在求教下 怎么求正整数的质因子~
比如36=2*2*3*3 19=1*19  2.3.19这些都是质因子~

回复列表 (共4个回复)

沙发

第1个算法的效率就是渣
第2个的程序:
function gcd(a, b:longint);
  begin
    if b=0 then gcd:=a else gcd:=gcd(b, a mod b);
  end;

板凳

谢谢楼上的   我还想问一下 怎么求正整数的质因子~
比如36=2*2*3*3 19=1*19  2.3.19这些都是质因子~

3 楼

我想(方法可能有点笨)
可以对该数进行分解,然后判断是否是素数就可以了

4 楼

求n的质因数, 先把n不停地除以2, 除到不能再除为止, 然后再不停地除以3, 除到不能再除为止, 然后再不停地除以5, 除到不能再除为止, 然后再不停地除以7, 除到不能再除为止......当除到1时就OK了

我来回复

您尚未登录,请登录后再回复。点此登录或注册