很郁闷的被个数学问题给搞晕了。具体实现:
1.去两个数n,m
2.n % m得到余数r
3.判断r==0,是则最大公因子是n;否则m赋n的值,n赋r的值,重复步骤12
其中需要判断两处:1.一开始n%m的时候是否需要判断n,m的大小
2.第二次交换m,n的时候是否需要判断n,m的值
例子:
1,n=12 m=4
按照上面的算法
最大公因子就是12了,与实际结果不符合,要求m<n
2. n=119,m=544
结果最大公因子为119,出问题,要求m>n
想问算法有问题么

解决方案 »

  1.   

    例子:
    1,n=12 m=4
    按照上面的算法
    最大公因子就是12了,与实际结果不符合,要求m<n
    2. n=119,m=544
    结果最大公因子为119,出问题,要求m>n
    上面两个要求写反了。
    1.m>n
    2.m<n
      

  2.   

    1.去两个数n,m,如果n<m,则交换
    2.n % m得到余数r
    3.判断r==0,是则最大公因子是m;否则m赋n的值,n赋r的值,重复步骤12加上第1点的判断,还有第三点中的n换成m
    不需要判断第二次交换n,m的值的,因为n%m后得到的r一定比m小,然后又将m赋给n,将r赋给m,所以后来的n一定大于m。
    例子1:
    n=12,m=4  因为n>m,所以不必交换
    n%m=12%4=0 
    r=0,所以最大公因子是m,即为4例子2;
    n=119,m=544,因为n<m所以交换n=544,m=119
    n%m=544%119=68!=0,所以继续,n=119,m=68
    n%m=119%68=51!=0,所以继续,n=68,m=51
    n%m=68%51=17!=0,所以继续,n=51,m=17
    n%m=51%17=0,所以终止,最大公因子为17