三种方法求最大公约数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void divide(int t,int r[])//分解质因数
{
int i,j=0;
for(i=2;i<=t;i++)
{
if(t%i==0)
{
t=t/i;
r[j]=i;
j=j+1;
i=i-1;
}
}
}
void main()
{
int m,n,i,j,k=0,p,c[N];
for(i=0;i<N;i++)//初始化数组
连续整数检测的时间复杂度为O(n/2)
欧几里得算法的时间复杂度为O(log n)
分解质因数算法的时间复杂度为O(n2)+O(n)
可以发现,虽然得到的结果都是一样的,但欧几里得算法比较优越:
耗费的时间,在算法中为0ms,虽然时间计数器有一定的误差,算法的执行时间不可能是0,但是由于执行时间太短,故用循环执行1000000次得到一个时间,只用来比较算法之间的快慢。
cin>>m>>n;
if(m<n)
{
t=m;
m=n;
n=t;
}
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
cout<<"两个自然数的最大公约数为"<<n<<endl;
}
方法三
#include<iostream>
#define N 10
using namespace std;
int a[N],b[N];
综上所述,在求最大公约数的过程中采用欧几里得算法比较优越。
昆明理工大学信息工程与自动化学院学生实验报告
(2011—2012学年第1学期)
课程名称:算法设计与分析开课实验室:信自楼机房4442011年10月12日
年级、专业、班
计科094
学号
200910405435
姓名
张洁
成绩
实验项目名称
求最大公约数
指导教师
张晶
教师评语
该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□
{
a[i]=0;
b[i]=0;
c[i]=0;
}
cout<<"请输入两个自然数:" <<eFra Baidu bibliotekdl;
cin>>m>>n;
divide(m,a);
divide(n,b);
for(i=0;i<=N;i++)//找出相同质因数
{
for(j=0;j<=N;j++)
{
if(a[i]==b[j])
{
c[k]=b[j];
(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;
(2)掌握并应用算法的数学分析和后验分析方法;
(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
(1)至少设计出三个版本的求最大公约数算法;
该同学的实验能力:A.强□B.中等□C.差□
该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□
实验报告是否规范:A.规范□B.基本规范□C.不规范□
实验过程是否详细记录:A.详细□B.一般□C.没有 □
教师签名:
年 月 日
一、上机目的及内容
1.上机内容
求两个自然数m和n的最大公约数。
2.上机目的
b[j]=0;//防止重复
k=k+1;
break;
}
}
}
for(i=0,p=1;i<N;i++)//质因数相加
{
if(c[i]!=0)
p=p*c[i];
}
cout<<"两个自然数的最大公约数是"<<p<<endl;
}
五、实验过程原始记录( 测试数据、图表、计算等)
六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获)
方法一
#include <iostream>
using namespace std;
int min(int m,int n)
{
if(m<n)
return m;
else
return n;
}
void main()
{
int m,n,t;
cout<<"请输入两个自然数"<<endl;
cin>>m>>n;
t=min(m,n);
(2)对所设计的算法采用大O符号进行时间复杂性分析;
(3)上机实现算法,并用计数法和计时法分别测算算法的运行时间;
(4)通过分析对比,得出自己的结论。
流程图
连续整数检测算法
欧几里得算法
分解质因数的流程图
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及VISUAL C++6.0软件
四、实验方法、步骤(或:程序代码或操作过程)
for(;t>0;t--)
{
if( m%t==0 && n%t==0 )
{
cout<<"这两个自然数最大公约数为"<<t<<endl;
break;
}
}
}
方法二
#include<iostream>
using namespace std;
void main()
{
int m,n,r,t;
cout<<"请输入两个自然数"<<endl;
相关文档
最新文档