操作系统实验指导三(编程练习—求最大公约数)
求两个数最大公约数问题

实验题目求两个自然数m和n的最大公约数实验目的⑴复习数据结构课程的相关知识,实现课程间的平滑过渡;⑵掌握并应用算法的数学分析和后验分析方法;⑶理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
实验内容(包括代码和对应的执行结果截图)#include<iostream>#include<math.h>using namespace std;int x=0,y=0,z=0,h=0;int lxzs(int m,int n){int t;if(m<n){t=m;x=x+2; //判断语句中基本语句m<n的比较和赋值语句t=m 共执行了2条基本语句}else{t=n;x=x+2;}while(m%t!=0||n%t!=0){t=t-1;x=x+3; //最坏情况,当m%t!=0和n%t!=0都执行了,加上t=t-1,所以每循环一次执行了3条基本语句}return t;}int ojld(int m,int n){int r;r=m%n;y=y+1;while(r!=0){m=n;n=r;r=m%n;y=y+4; //基本语句包括r!=0和m=n;n=r;r=m%n共四条,所以每循环一次,计数器加4}return n;}int zzxjfdg(int m,int n){while(1){if(m>n){m=m-n;z=z+3;}else if(m<n){n=n-m;z=z+4;}elsereturn m;}}int zzxcfdg(int m,int n){while(m*n!=0){if(m>n){m=m%n;h=h+3; //基本语句m*n!=0和m>n和m=m%n的执行,计数器加3}else{n=n%m;h=h+3; //基本语句m*n!=0和m>n和n=n%m的执行,计数器加3}}h=h+1; //基本语句m==0?n:m的执行,计数器加1return (m==0?n:m);}void main(){int m,n;int a,b,c,d;for(int i=0;i<10;i++){cout<<"请输入两个自然数:"<<endl;cin>>m>>n;a=lxzs(m,n);b=ojld(m,n);c=zzxjfdg(m,n);d=zzxcfdg(m,n);cout<<"第1种求两个最大公约数算法得最大公约数为:"<<a<<"基本语句执行次数为:"<<x<<endl;cout<<"第2种求两个最大公约数算法得最大公约数为:"<<b<<"基本语句执行次数为:"<<y<<endl;cout<<"第3种求两个最大公约数算法得最大公约数为:"<<c<<"基本语句执行次数为:"<<z<<endl;cout<<"第4种求两个最大公约数算法得最大公约数为:"<<d<<"基本语句执行次数为:"<<h<<endl;x=0;y=0;z=0;h=0;}}实验结果分析由上述实验结果分析可知,第四种算法效率最高,然后是第二种算法,其次是第三种算法,效率最低的是第一种算法。
【免费下载】c语言程序设计 求两个数最大公约数

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
c语言求任意两个数的最大公约数,用辗转相除法实现

C语言求任意两个数的最大公约数,通常可以使用辗转相除法进行实现。
辗转相除法,又称欧几里德算法,是求两个非零整数的最大公约数的一种方法。
其基本原理是通过依次取模运算,将两个数替换为除数和余数的过程,直到余数为0,此时除数即为最大公约数。
下面将通过C语言代码展示辗转相除法的实现过程。
1. 定义函数我们需要定义一个函数来实现辗转相除法。
该函数接受两个整数参数,然后利用while循环进行辗转相除,直到余数为0,返回最大公约数。
```cint gcd(int a, int b){int temp;while (b != 0){temp = a % b;a = b;b = temp;}return a;}```2. 主函数接下来,我们编写主函数来调用gcd函数,并输入两个整数作为参数。
在主函数中,我们可以通过用户输入实现任意两个数的最大公约数求解。
```c#include <stdio.h>int main(){int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);int result = gcd(num1, num2);printf("最大公约数为:%d\n", result);return 0;}```3. 完整代码将上述定义的函数和主函数整合在一起,得到完整的C语言代码如下所示:```c#include <stdio.h>int gcd(int a, int b){int temp;while (b != 0){temp = a % b;a = b;b = temp;}return a;}int main(){int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);int result = gcd(num1, num2);printf("最大公约数为:%d\n", result);return 0;}```通过上述代码,就可以在C语言中实现求任意两个数的最大公约数的功能。
python程序设计最大公约数的计算实验

一、概述近年来,随着计算机技术的飞速发展,程序设计已经成为计算机科学领域中极具影响力的研究方向。
其中,Python作为一种高效、简洁、易学的编程语言,受到了广泛关注和应用。
本实验旨在利用Python 进行最大公约数的计算,探索其在数学计算方面的应用。
二、最大公约数的定义最大公约数,亦称最大公因数,指两个或多个整数共有约数中最大的一个。
在数学上,最大公约数常用缩写符号"gcd"表示。
两个整数a和b的最大公约数通常表示为gcd(a, b)。
三、Python程序设计实验步骤1. 导入所需的Python模块在进行最大公约数计算之前,首先需要导入Python的数学模块,以便调用其中的数学函数。
```pythonimport math```2. 编写求最大公约数的函数借助Python的函数机制,可以编写一个专门用于求最大公约数的函数。
该函数以两个整数作为参数,返回它们的最大公约数。
```pythondef gcd(a, b):return math.gcd(a, b)```3. 输入待计算的数字通过用户输入的方式,获取需要计算最大公约数的两个整数。
```pythonnum1 = int(input("请输入第一个整数:"))num2 = int(input("请输入第二个整数:"))```4. 调用函数计算最大公约数将用户输入的两个整数作为参数,调用编写的求最大公约数的函数进行计算。
```pythonresult = gcd(num1, num2)print("最大公约数为:", result)```四、实验结果与分析通过以上Python程序设计,可以轻松、高效地求出任意两个整数的最大公约数。
该程序设计不仅简洁清晰,而且具有较高的计算精度和效率。
在数学计算方面,Python程序设计展现了其巨大的优势和应用价值。
五、结论与展望通过本次实验,不仅对Python的函数机制有了更深入的认识,而且对最大公约数的理论知识和计算方法也有了更为清晰的理解。
编程题15_用函数求最大公约数

if (m<=0||n<=0)
cout<<"error input.\n";
else
{
r=Gcd(m,n);
cout<<"Gcd="<<r<<",Lcm="<<m*n/r<<endl;
}
return 0;
}
参考源代码仅供老师参考,不要添加到系统中
允许的编程语言:选g++-3.3,
在保存并预览之后,点开:“测试用例”选项卡,再选择下方的“添加”,加入3组测试用例
见测试用例显示
参考源程序代码
注意:本题可以用书上的方法5-11来做
下面的答案给出不同的求解方法。
#include<iostream>
using Βιβλιοθήκη amespace std;/*方法一:递归
int Gcd(int m,int n)
选g33名称和描述两项请将文档第二列内容对应贴入系统中测试用例请各位自己添加题目的最后已有描述每个题目也说明了要给几组测试用例其他选项可以自行设定例如开启时间结束时间等等需要大家逐步熟悉
名称
编程题15:用函数求最大公约数。
备注
描述
编写函数Gcd求两个正整数的最大公约数,将此公约数返回。主函数中读入两个正整数m和n,调用Gcd函数,求m和n的最大公约数和最小公倍数.
{
int r;
r=m%n;
if (!r)
return n;
else
return Gcd(n,r);
}*/
/*方法二:迭代*/
C语言求两个正整数的最大公约数示例代码

C 语⾔求两个正整数的最⼤公约数⽰例代码⽬录前⾔1.穷举法2.欧⼏⾥得算法(辗转相除法)3.递归⽅法附:相减法总结前⾔两个正整数的最⼤公约数(Greatest Common Divisor, GCD )是能够整除这两个整数的最⼤整数。
两个正整数的最⼤公约数的求法有多种解答,本⽂就三种⽅法做详细介绍:穷举法、欧⼏⾥得算法(辗转相除法)、递归⽅法。
我们从⼀道问题来引⼊:编写计算最⼤公约数的函数Gcd(),在主函数中调⽤该函数计算并输出从键盘任意输⼊的最⼤公约数。
1.穷举法根据最⼤公约数的定义,我们可以采⽤⼀种最简单的⽅法——穷举法来编写代码。
由于a 和b 的最⼤公约数不可能⽐a 和b 中的较⼩者还⼤,否则⼀定不能整除它,因此,先找到a 和b 中的较⼩者t ,然后从t 开始逐次减1尝试每种可能,即检验t 到1之间的所有整数,第⼀个满⾜公约数条件的t ,就是a 和b 的最⼤公约数。
据此我们可编写函数Gcd()如下:12345678910111213//函数功能:计算a 和b 的最⼤公约数,输⼊负数时返回-1int Gcd(int a, int b){ int i, t; if (a <=0 || b <= 0) return -1; t = a < b ? a : b;for (i=t; i>0; i--){if (a%i==0 && b%i==0)return i;}return 1;}这种⽅法简单暴⼒,思维量⼩,但效率较低,且当两个正整数都较⼤,且最⼤公约数为1时,循环的次数为较⼩数的值,可想⽽知所需时间会很长。
2.欧⼏⾥得算法(辗转相除法)下⾯介绍⼀种求最⼤公约数较常⽤的办法:欧⼏⾥得算法(辗转相除法)。
忽略数学原理,我们有如下算法:对正整数a 和b ,连续进⾏求余运算,直到余数为0为⽌,此时⾮0的除数就是最⼤公约数。
设 r=a mod b 表⽰a 除以b 的余数,若 r≠0 ,则将b 作为新的a ,r 作为新的b ,重复 a mod b 运算,直到 r=0 为⽌,此时b 为所求的最⼤公约数。
c程序设计最大公约数
c程序设计最大公约数最大公约数(Greatest Common Divisor,简称GCD)是数学中的一个概念,指的是两个或多个整数中最大的能够同时整除它们的正整数。
在计算机编程中,求最大公约数是一项常见的任务,特别是在涉及到分数运算、化简分数、计算最简形式等情况下。
在C程序设计中,求最大公约数有多种方法,下面将介绍几种常见的方法。
1. 辗转相除法:辗转相除法,也称为欧几里德算法,是一种求最大公约数的有效方法。
它的基本思想是利用两个整数的除法运算,将较大的数除以较小的数,然后用较小的数除以所得的余数,再用余数除以所得的余数,直到余数为0为止。
最后一次除法运算的除数就是最大公约数。
下面是辗转相除法的C代码实现:```c#include <stdio.h>int gcd(int a, int b) {int temp;while (b != 0) {temp = a % b;a = b;b = temp;}return a;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2));return 0;}```2. 更相减损术:更相减损术是另一种求最大公约数的方法。
它的基本思想是不断用两个数中较大的数减去较小的数,直到两个数相等为止,最后得到的数就是最大公约数。
下面是更相减损术的C代码实现:```c#include <stdio.h>int gcd(int a, int b) {while (a != b) {if (a > b) {a = a - b;} else {b = b - a;}}return a;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2));return 0;}```3. 穷举法:穷举法是一种简单但效率较低的求最大公约数的方法。
【C语言程序设计】C语言求最大公约数(详解版)!
【C语⾔程序设计】C语⾔求最⼤公约数(详解版)!问题描述求任意两个正整数的最⼤公约数(GCD)。
问题分析如果有⼀个⾃然数a能被⾃然数b整除,则称a为b的倍数,b为a的约数。
⼏个⾃然数公有的约数,叫做这⼏个⾃然数的公约数。
公约数中最⼤的⼀个公约数,称为这⼏个⾃然数的最⼤公约数。
根据约数的定义可知,某个数的所有约数必不⼤于这个数本⾝,⼏个⾃然数的最⼤公约数必不⼤于其中任何⼀个数。
要求任意两个正整数的最⼤公约数即求出⼀个不⼤于其中两者中的任何⼀个,但⼜能同时整除两个整数的最⼤⾃然数。
算法设计思路有两种:第⼀种:采⽤穷举法按从⼩到⼤(初值为1,最⼤值为两个整数当中较⼩的数)的顺序将所有满⾜条件的公约数列出,输出其中最⼤的⼀个;第⼆种,按照从⼤(两个整数中较⼩的数)到⼩(到最⼩的整数1)的顺序求出第⼀个能同时整除两个整数的⾃然数,即为所求。
我们将对第⼆种思路进⾏详细说明。
两个数的最⼤公约数有可能是其中的⼩数,所以在按从⼤到⼩顺序找寻最⼤公约数时,循环变量i的初值从⼩数n开始依次递减,去寻找第⼀个能同时整除两整数的⾃然数,并将其输出。
需要注意的是,虽然判定条件是i>0,但在找到第⼀个满⾜条件的i值后,循环没必要继续下去;如,25和15,最⼤公约数是5,对于后⾯的4、3、2、1没必要再去执⾏,但此时判定条件仍然成⽴,要结束循环只能借助break语句。
程序流程图:下⾯是完整的代码:#include<stdio.h>int main(){int m, n, temp, i;printf("Input m & n:");scanf("%d%d", &m, &n);if(m<n) /*⽐较⼤⼩,使得m中存储⼤数,n中存储⼩数*/{ /*交换m和n的值*/temp=m;m=n;n=temp;}for(i=n; i>0; i--) /*按照从⼤到⼩的顺序寻找满⾜条件的⾃然数*/if(m%i==0 && n%i==0){/*输出满⾜条件的⾃然数并结束循环*/printf("The GCD of %d and %d is: %d\n", m, n, i);break;}return0;}运⾏结果:Input m & n:100 125The GCD of 125 and 100 is: 25不管你是转⾏也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~【值得关注】我的!【点击进⼊】全栈程序员正在等你加⼊~。
编程求最大公约数的方法
编程求最大公约数的方法
有多种方法可以求两个数的最大公约数。
1. 辗转相除法:也称为欧几里得算法。
设两个数为a和b,先用a除以b得到余数c,再用b除以c得到余数d,再用c除以d得到余数e...重复这个过程直到余数为0,此时的除数就是a和b的最大公约数。
```python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
```
2. 更相减损法:设两个数为a和b,若a > b,则用a减去b得到差c,c和b的最大公约数即为a和b的最大公约数。
```python
def gcd(a, b):
while a != b:
if a > b:
a -= b
else:
b -= a
return a
```
3. 整除法:设两个数为a和b,先找到a和b的最小值min,然后从min开始递减,找到能同时整除a和b的最大数即为a和b的最大公约数。
```python
def gcd(a, b):
min_num = min(a, b)
for i in range(min_num, 0, -1):
if a % i == 0 and b % i == 0:
return i
return 1
```
其中,辗转相除法是最常用的方法,效率较高。
c语言程序设计-求两个数最大公约数
1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数, 并输出结果。
这两个数由键盘输入。
程序设计:#include<stdio.h>int hcf(int x,int y){int t;if(xvy){t=x;x=y;y=t;} while((t=x%y)!=0){x=y;y=t;}return y;} int lcf(int x,int y,int m){return x*y/m;}int main(){int hcf(int,int);int lcf(int,int,int);int x,y,h,l;printf("请输入两个数:"); scanf("%d%d",&x,& y);h=hcf(x,y);l=lcf(x,y,h);printf("最大公约数为:h=%d\n最小公倍数为:l=%d\n",h,l); return 0; }运行结果:2求方程ax A2+bx+c=0的根,用3个函数分别求当:b A2-4ac大于0、等于0和小于0时的根并输出结果。
从主函数输入a,b, c的值。
程序设计:#include<stdio.h>#include<math.h>void g_two(double a,double b,double c) {double x1,x2;x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf("方程的两个根为:x仁%f\nx2=%f\n",x1,x2); }void g_one(double a,double b,double c){double x;x=(-b)/(2*a);printf("方程的两个根为:x1=x2=%f\n",x);}void g_zone(double a,double b,double c){printf("无解\n");}void main(){void g_two(double,double,double);void g_one(double,double,double);void g_zone(double,double,double); double a,b,c,t;printf("请输入a、b、c 的值:"); scanf("%lf%lf%lf", &a,&b,& c); t=b*b-4*a*c;if(t>0)g_two(a,b,c);else if(t==0)g_one(a,b,c);elseg_zone(a,b,c);}运行结果:3.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三编程练习—求最大公约数
(基础性编程实验 2学时)
一. 目的要求
通过编程实现求最大公约数,提高编程能力。
二.实验任务
求两个数的最大公约数
三.实验环境、设备
硬件:586以上的PC系列机,主频大于166M,内存大于16MB,硬盘空闲空间大于500MB。
软件:选择一个自己熟悉的计算机操作系统(如 DOS、 Windows98/2000/XP、UNIX、linux等,根据各学校的条件与环境而定)和程序设计语言(如 Turbo
C、 C语言、PASCAL语言等)。
四.实验指导
gcd(a,b)=gcd(b,a%b)
gcd(729,99)=gcd(99,36)=gcd(36,27)=gcd(27,9)=gcd(9,0)=9
gcd(8,6)=gcd(6,2)=gcd(2,0)=2
gcd(15,18)=gcd(18,15)=gcd(15,3)=gcd(3,0)=3
将运行后的数据填入下表:
五.实验源代码
#include <iostream>
using namespace std;
int main()
{ int max;
int min;
int temp;
cout<<"请输入两个数据:"<<endl; cin>>max>>min;
while(min!=0)
{ temp=max;
max=min;
min=temp%max;
}
cout<<"最大公约数是:"<<max<<endl; }。