分享

求两个数的最大公约数的三种做法

 新用户82073329 2023-03-18 发布于山西

1.相减法

两个数,相等时,最大公约数为他们其中任意一个。不相等时,用大数减小数。得到的差和之前的那个小数再次相减,直到两个数相等,这两个中,任意一个都是最大公约数。(代码如下)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a = 0;
  5. int b = 0;
  6. printf('请任意输入两个数:');
  7. scanf('%d%d', &a, &b);
  8. while((a-b) != 0)
  9. {
  10. if(a>b)
  11. a = a-b;
  12. else
  13. b = b-a;
  14. }
  15. printf('最大公约数为:%d\n', b);
  16. return 0;
  17. }

2.穷举法

如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。(代码如下)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a = 0;
  5. int b = 0;
  6. printf('请任意输入两个数:');
  7. scanf('%d%d', &a, &b);
  8. if(a>=b)
  9. {
  10. int i =0;
  11. for(i=b; i>=1; i--)
  12. {
  13. if((a%i)==0 && (b%i)==0)
  14. {
  15. printf('最大公约数为:%d\n', i);
  16. break;
  17. }
  18. }
  19. }
  20. else
  21. {
  22. int j = 0;
  23. for(j=a; j>0; j--)
  24. {
  25. if((a%j)==0 && (b%j)==0)
  26. {
  27. printf('最大公约数为:%d\n', j);
  28. break;
  29. }
  30. }
  31. }
  32. return 0;
  33. }

3.辗转相除法

用大数对小数求余,若余数为0,则除数为最大公约数。若余数不为0,将此余数作为除数,小数作为被除数,重新求余,直到余数为0为止。此时的最大公约数为余数。例如:27和6.  27%6=3.  6%3=0.  所以最大公约数为3.(代码如下)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a = 0;
  5. int b = 0;
  6. printf('请输入两个数:');
  7. scanf('%d%d', &a, &b);
  8. if(a >= b)
  9. {
  10. int c = a%b;
  11. while(c != 0)
  12. {
  13. a = b;
  14. b = c;
  15. c = a%b;
  16. }
  17. printf('最大公约数为:%d\n', b);
  18. }
  19. else
  20. {
  21. int d = b%a;
  22. while(d != 0)
  23. {
  24. b = a;
  25. a = d;
  26. d = b%a;
  27. }
  28. printf('最大公约数为:%d\n', a);
  29. }
  30. return 0;
  31. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多