Python使用穷举法求两个数的最大公约数问题

 更新时间:2022年12月20日 11:16:52   作者:半岛铁盒@  
这篇文章主要介绍了Python使用穷举法求两个数的最大公约数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用穷举法求两个数的最大公约数

for m in range (0,2):
    a = int(input("请输入一个数:"))
    b = int(input("请输入另外一个数:"))
    #判断num1与num2的大小
    if a > b:
        #获取最小值
        min = b
    else:
        #获取最小值
        min = a
    for i in range(min+1,0,-1):    #倒序
        #满足公因数的条件:
        if (a % i == 0) and (b % i == 0):
            c = i
            break
    print('这两个数的最大公约数是:%d '%c)

穷举法求N个数的最大公约数和最小公倍数

基本要求

求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。

提高要求

思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x满足:

  • 1、x和a0的最大公约数是a1;
  • 2、x和b0的最小公倍数是b1。

Hankson的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x的个数。

输入格式

  • 输入第一行为一个正整数n,表示有n组输入数据。接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证a0能被a1整除,b1能被b0整除。

输出格式

  • 输出共n行。每组输入数据的输出结果占一行,为一个整数。
  • 对于每组数据:若不存在这样的x,请输出0;
  • 若存在这样的x,请输出满足条件的x的个数;

样例输入

2

41 1 96 288

95 1 37 1776

算法设计思路

本程序先用穷举法计算两个数的最大公约数或最小公倍数。从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。

①定义1:对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

②定义2:对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。

#include<stdio.h>
#define N 1000  /*自定义数组长度*/
int input(int t[])
{
    int i,n;
    int k=1;
    printf("Please input the count of numbers(n>=2):"); /*输入计算值的个数*/
    scanf("%d",&n);
    while(k)
    {
        printf("Please input numbers:\n");  /*输入所算值*/
        for(i=0;i<n;i++)
        {
            scanf("%d",&t[i]);
        }
        k=exper(t,n);
    }
    return n;
}
int exper(int t[],int n)   /*验证函数*/
{
    int i;
    for(i=0;i<n;i++)
    {
        if(!t[i])
        {
            printf("error(输入为0)\n");
            return 1;
        }
    }
   return 0;
}
int divisor (int a,int b) /*自定义函数求两数的最大公约数*/
{
    int  temp;          /*定义义整型变量*/
    temp=(a>b)?b:a;    /*采种条件运算表达式求出两个数中的最小值*/
    while(temp>0)
    {
       if (a%temp==0&&b%temp==0) /*只要找到一个数能同时被a,b所整除,则中止循环*/
          break;
       temp--;      /*如不满足if条件则变量自减,直到能被a,b所整除*/
    }
  return (temp); /*返回满足条件的数到主调函数处*/
}
int Gcd(int t[],int n)
{
    int i;
    int c=t[0];
    for(i=1;i<n;i++)
    {
        c=divisor(c,t[i]);  /*求N个数的最大公约数*/
    }
    return c;
}
int multiple (int a,int b)
{
  int p,q,temp;
  p=(a>b)?a:b;   /*求两个数中的最大值*/
  q=(a>b)?b:a;  /*求两个数中的最小值*/
  temp=p;      /*最大值赋给p为变量自增作准备*/
  while(1)   
  {
    if(p%q==0)
      break;  /*只要找到变量的和数能被a或b所整除,则中止循环*/
    p+=temp;   /*如果条件不满足则变量自身相加*/
  }
  return  (p);
}
int Mul(int t[],int n)
{
    int i;
    int s=t[0];
    for(i=0;i<n;i++)
    {
        s=multiple(s,t[i]);  /*求N个数的最小公倍数*/
    }
    return s;
}
int main()
{
 int t[N];
 int n;
 int flag=1;
 while(flag)
 {
    n=input(t);
    printf("The higest common divisor is %d\n",Gcd(t,n));  /*输出最大公约数*/
    printf("The lowest common multiple is %d\n",Mul(t,n));/*输出最小公倍数*/
    printf("retreat:press 0\ncontiune:press 1");
    scanf("%d",&flag);
 }
 return 0;
}

测试截屏

输入数据正确时:

输入数据有0时会提示错误,计算完成后可以退出和继续:

总结

求N个数的最大公约数和最小公倍数的可以联系上机作业:用四种方法求两个数最大公约数和最小公倍数,像这种思考方式可以用于以后的解决问题中。

在完成基本要求中,程序完成比较顺利。提高要求仔细读了几遍,明白了题意,寻找满足x的个数,这就要用到循环和计数器一个个去找,但此要求最终没能完成,在对x的求解过程仍有问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Numpy中创建数组的9种方式小结

    Numpy中创建数组的9种方式小结

    本文主要介绍了Numpy中创建数组的9种方式小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python中所有子图标签Legend显示问题记录

    Python中所有子图标签Legend显示问题记录

    在Python中,利用matplotlib创建的子图可以很容易地添加图例,无论是为每个子图单独添加,还是统一在一起,本文详细介绍了如何在多个子图中显示图例,包括全局图例的显示、图例样式的调整和图例位置的调整等,需要的朋友可以参考下
    2024-12-12
  • Python对象的深拷贝和浅拷贝详解

    Python对象的深拷贝和浅拷贝详解

    这篇文章主要介绍了Python对象的深拷贝和浅拷贝详解,本文从Python核心编程2书中摘录而来,总结的比较精辟,需要的朋友可以参考下
    2014-08-08
  • 一文教你向Pandas DataFrame添加行

    一文教你向Pandas DataFrame添加行

    这篇文章主要给大家介绍了关于如何向Pandas DataFrame添加行的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • python 全局变量的import机制介绍

    python 全局变量的import机制介绍

    在之前学习python设计模式(工厂模式实践篇),希望使用全局变量代替c++的宏完成服务自动注册功能时,遇到过一个问题,全局变量的定义和使用放在同一个可执行脚本中的问题
    2017-09-09
  • Python读取txt文件数据的方法(用于接口自动化参数化数据)

    Python读取txt文件数据的方法(用于接口自动化参数化数据)

    这篇文章主要介绍了Python读取txt文件数据的方法(用于接口自动化参数化数据),需要的朋友可以参考下
    2018-06-06
  • Python urllib request模块发送请求实现过程解析

    Python urllib request模块发送请求实现过程解析

    这篇文章主要介绍了Python urllib request模块发送请求实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Python可视化神器pyecharts绘制水球图

    Python可视化神器pyecharts绘制水球图

    这篇文章主要介绍了Python可视化神器pyecharts绘制水球图,水球图首先是动态的效果,像水流一样波动,所以看起来比较的舒服,一般用于业务里面的完成率,其实和之前的仪表盘有点类似
    2022-07-07
  • django实现web接口 python3模拟Post请求方式

    django实现web接口 python3模拟Post请求方式

    今天小编就为大家分享一篇django实现web接口 python3模拟Post请求方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 简单谈谈python中的Queue与多进程

    简单谈谈python中的Queue与多进程

    本文给大家简单总结了下再Python中的队列对象(queue)以及多进程(multiprocessing),非常的简单实用,有需要的小伙伴可以参考下
    2016-08-08

最新评论