-
题目描述:
-
输入两个正整数,求其最大公约数。
-
输入:
-
测试数据有多组,每组输入两个正整数。
-
输出:
-
对于每组输入,请输出其最大公约数。
-
样例输入:
-
49 14
-
样例输出:
算法分析
采用辗转相除法。设有A,B两个数符合求取最大公约数,则 result = A % B,如果 result 不是最大公约数,则 A = B,B = result 循环求解,有最大公约数即结束程序。
结果分析
最大公约数求解中,递归方法比非递归方法效率高,递归方法编译时间为0.45-0.55 seconds;非递归方法编译时间为1.15-1.17 seconds
#include<stdio.h>
#include<stdlib.h>
int gcd(int a,int b){
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main(){
int a,b;
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",gcd(a,b));
}
return 0;
}/*
*最大公约数计算(非递归方法)
*/
#include <iostream>
using namespace std;
int main()
{
int m, n, temp ;
while(cin>>m>>n)
{
while(n != 0)
{
m = m%n;
temp = n;
n = m;
m = temp;
}
cout<<m<<endl;
}
return 0;
}
该博客探讨了如何使用辗转相除法求解两个数的最大公约数,对比了递归和非递归算法在效率上的差异。通过算法分析指出,递归方法在编译时间上显著优于非递归方法,递归方法平均用时约0.5秒,而非递归方法则平均用时约1.16秒。
&spm=1001.2101.3001.5002&articleId=20644433&d=1&t=3&u=dbbd8f3dca354b39805d7035f6ff85ed)
8620

被折叠的 条评论
为什么被折叠?



