iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python使用穷举法求两个数的最大公约数问题
  • 878
分享到

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

Python穷举法最大公约数Python最大公约数 2022-12-20 12:12:19 878人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录使用穷举法求两个数的最大公约数穷举法求N个数的最大公约数和最小公倍数基本要求提高要求算法设计思路测试截屏总结使用穷举法求两个数的最大公约数 for m in range (0

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

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) 
          break;
       temp--;      
    }
  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]);  
    }
    return c;
}
int multiple (int a,int b)
{
  int p,q,temp;
  p=(a>b)?a:b;   
  q=(a>b)?b:a;  
  temp=p;      
  while(1)   
  {
    if(p%q==0)
      break;  
    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]);  
    }
    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的求解过程仍有问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

本文链接: https://www.lsjlt.com/news/175339.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作