zoukankan      html  css  js  c++  java
  • 求两个数的最大公约数(列举法与辗转相除法)

    最大公约数定义:把能够整除某一个数的数,叫做这个数的约数。几个数所公有的约数叫这几个数的公约数。公约数中最大的一个叫做这几个数的最大公约数。 例如:27和15,,27 的约数有1,27,3,9;15的约数为:1,15,3,5。而27 和15 的公约数为1,3.则最大公约数为3。

    在了解了最大公约数后我们便可以从同时要被两个数整除,且还是最大值可以想到一个比较麻烦的方法。

    方法一:列举法

    用循环进行列举依次排查,从1开始到它本身(这里的循环结束的表示可以在两个数之间随意选择,只要可以取到它本身就可以),因为我们是从小到大依次排列过来的所以每次只要将可以整除的数字赋值给一个变量就可以,保证变量每次都会更新为最大值。

     

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a, b;
     5     int j = 0;
     6     printf("请输入两个整数:
    ");
     7     printf("a=");
     8     scanf("%d", &a);
     9     printf("b=");
    10     scanf("%d", &b);
    11     //这里从1开始依次排查,直到取到它本身为止
    12     //循环可以保证每次取到的公约数依次增大
    13     for (int i = 1;i <= b;i++)
    14     {
    15         if (a % i == 0 && b % i == 0)
    16         {
    17             j = i;//将公约数赋值给变量
    18         }
    19     }
    20     printf("最大公约数为:%d", j);
    21     
    22     return 0;
    23 }    

    方法二:辗转相除法

    先将两个整数a与b进行相除,如果余数为0(a%b==0),则b为两数的最大公约数;如果不等于0,则将b赋值给a,将余数赋值给b,在对a与b进行相除,直到余数为0时终止(a%b==0),则b为最大公约数。

     1 #include<stdio.h>
     2 int main()
     3 {
     4     //方法二:辗转相除法
     5     int a, b, i;
     6     printf("请输入两个整数:
    ");
     7     printf("a=");
     8     scanf("%d", &a);
     9     printf("b=");
    10     scanf("%d", &b);
    11     i = a % b;
    12     while(i != 0)
    13     {
    14         a = b;
    15         b = i;
    16         i = a % b;
    17     }
    18     printf("%d",b);
    19     
    20     return 0;
    21 }
  • 相关阅读:
    May LeetCoding Challenge22 之 比较器comparator、map按Value排成逆序、桶排序
    May LeetCoding Challenge21 之 动态规划的min使用
    May LeetCoding Challenge20 之 二叉树中序遍历
    May LeetCoding Challenge19 之 单调栈2.0
    May LeetCoding Challenge18 之 滑动窗口2.0
    May LeetCoding Challenge17 之 滑动窗口
    May LeetCoding Challenge16 之 链表重组
    APT常用命令
    DDCTF-misc-流量分析
    Wireshark学习笔记
  • 原文地址:https://www.cnblogs.com/cuckoo-/p/10267614.html
Copyright © 2011-2022 走看看