Python使用穷举法求两个数的最大公约数问题
作者:半岛铁盒@ 发布时间:2022-01-20 21:26:51
使用穷举法求两个数的最大公约数
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时会提示错误,计算完成后可以退出和继续:
来源:https://blog.csdn.net/weixin_45556441/article/details/123733406


猜你喜欢
- 前面的话发布一个版本时,我们通常先在版本库中打一个标签(tag)。这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就
- 1 蚂蚁森林简介蚂蚁森林是一项旨在带动公众低碳减排的公益项目,每个人的低碳行为在蚂蚁森林里可计为"绿色能量"。"
- 本文实例讲解了tab响应式切换效果,利用js对样式进行动态切换即可。 多的不说,请看代码<html> <head>
- 什么是pdb不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代
- 看代码吧~# 加载库import pandas as pd# 데이터프레임을 만듭니다.dataframe = pd.DataFrame()
- 配置类config_file:from configparser import ConfigParserclass config_file:
- 本文为大家分享了数据库优化方案,供大家参考,具体内容如下1. 利用表分区分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上
- 本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息。通过抓包发现,海康摄像头发送、接收数据使
- 一、xajax与其它ajax框架的比较 xajax功能很简单,但很灵活!~它不象其它一些大的框架,功能确实强大,但执行速度不敢恭维。。功能虽
- 首先说一下 我在form表单里面遇见的坑:1.例如我要给后台传的不是对象,而是一个数组,怎么写验证?2.比如我有四个弹出框,都要做验证,这个
- 慢查询首先,无论进行何种优化,开启慢查询都算是前置条件。慢查询机制,将记录过慢的查询语句(事件),从而为DB维护人员提供优化目标。检查慢查询
- BN原理、作用函数参数讲解BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, tr
- 我们经常在使用CLI工具的时候,都会有这样的参数输出:➜ ~ docker versionClient: Docker Engine - C
- 启动targetcli时遭遇ImportError: cannot import name ALUATargetPortGrou
- 实现效果:通过url所绑定的关键名创建目录名,每次访问一个网页url后把文件下载下来代码:其中 data[i][0]、data[i][1]
- 看如下asp代码:<%@ codepage="65001" %><!-- 
- 一、背景在kubernetes的世界中,很多组件仅仅需要一个实例在运行,比如controller-manager或第三方的controlle
- 概念Slice切片是对底层数组Array的封装,在内存中的存储本质就是数组,体现为连续的内存块,Go语言中的数组定义之后,长度就已经固定了,
- 有时在浏览网页时,常常因为网页中的图片文件过大而使下载时间较长,这样还没有下载完,就会有许多浏览者不耐烦地拂袖而去,从而损失了客户流。但要使
- 当然,这些并非真正的定律,而只是一些有益的忠告,使你免陷于使用层时可能的困顿中。原来有九条定律的,我们精简掉一条,还有下面的八条:1. 如果