㈠ c语言编程用辗转相除法(使用递归调用)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。
#include<stdio.h>
intgcd(intm,intn)
{
intk;
if(n>m)
{
k=m;
m=n;
n=k;
}
k=m%n;
if(k==0)
returnn;
else
gcd(n,k);
}
main()
{
intm,n;
scanf("[%d],[%d]",&m,&n);
printf("Theresultis[%d]! ",gcd(m,n));
}
希望能帮到你,满意请采纳,谢谢!!
㈡ c语言编程:输入两个正整数,求最大公约数和最小公倍数
#include
voidmain(){
inta,b,n1,n2,t;
while(true)
{
printf("任意输入两个正整数: ");
scanf("%d%d",&n1,&n2);
if(n1
{
t=n1;
n1=n2;
n2=t;
}
a=n1;
b=n2;
while(b!=0){/*利用辗除法,直到b为0为止*/
t=a%b;
a=b;
b=t;
}
printf("最大公约数为:%d ",a);
printf("最小公倍数为:%d ",n1*n2/a);
}}
(2)辗转相除c语言递归扩展阅读
C语言求最大公约数辗转相除法
#include<stdio.h>
intgcd(intm,intn);//将辗转相除的过程封装为函数,使主函数结构清晰。
intmain(void)
{
inta,b;
while(~scanf("%d%d",&a,&b)){//多组数据输入时的方式之一与while(scanf("%d%d",&a,&b)!=EOF)用途相同
printf("%d ",gcd(a,b));
return0;
}
intgcd(intm,intn)
{
returnn?gcd(n,m%n):m;//此函数将辗转相除的过程以递归的形式呈现,简化程序属于常规套路。
}
㈢ C语言:用递归实现辗转相除法和辗转相减法求最大公约数和最小公倍数,下面2个程序错了,帮我改改,谢谢!
这是两铅毕颂个算法的代码,槐郑主函数main()自己写,很简单 。数烂
int gcd(int x,int y) //辗转相除法求最大公约数
{
int z;
do
{z=x%y;
x=y;
y=z;
}while(z!=0);
return x;
}
int gcd(int n,int m) { //这是递归
if (n%m==0)
return m;
else
return gcd(m,n%m);
}
㈣ 编程一个C语言程序,使用递归方法,输入两个数,采用辗转相除法来计算最大公约数
#include<stdio.h>
int行烂gcd(inta,intb)
{
if(a%b==0)
returnb;
returngcd(b,a%b);
}
intmain(void)
{
inta,b;
scanf("档岩漏%d%d",&枣郑a,&b);
printf("%d ",gcd(a,b));
return0;
}
㈤ c语言辗转相除法求最大公约数
可用递归来求。
推荐以下代码:
#include<stdio.h>
intgcd(inta,intb)//求最大公约数函数
{
if(a%b==0)returnb;
elsereturngcd(b,a%b);//辗转相除法
}
voidmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d ",gcd(a,b));
}
㈥ C语言:关于求最大公约数的辗转相除法递归实现,下面的程序有错,请帮我改一下
#include<stdio.h>
int gcd(int m,int n)
{
int r,t;
if(m<n)
{
t=m;
m=n;
n=t;
}
r=n;
n=m%n;
m=r;
if(n==0)
return m;
else
gcd(m,n);
}
int main()
{
int a;
int b;
scanf("%d%d",&a,&b);
int result=gcd(a,b);
printf("%d\n",result);
getchar();
return 0;
}
int fun2(int x,int y,int z)
{
return y;
}
int fun3(int x,int y,int z)
{
return z;
}
㈦ 辗转相除法c语言代码
辗转相除法用来求两个数的最大公约数,代码如下:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta,b,r;
scanf("%d%d",&a,&b);
while(b!=0)//当其中一个数为0,另一个数就是两数的最大公约数
{
r=a%b;
a=b;
b=r;
}
printf("GreatestCommonDivisor:%d ",a);
system("pause");
}
运行结果:
㈧ 大神 如何在 C语言 用辗转相除法和递归 求最大公约数和最小公倍数要在下面给出的代码中完成 。
#include<stdio.h>
intgcd(intn,intm);
intlcm(intn,intm);
intmain(){
intn,m;
scanf("%d雹慧昌%d",&n,&m);
printf("%d ",gcd(n,m));
printf("%d ",lcm(n,m));
碧雹return0;
}
intgcd(intn,intm){
if(m<=n){
//请在这里继续完成gcd函源扒数
if(n%m){
returngcd(m,n%m);
}
else{
returnm;
}
}else{
returngcd(m,n);
}
}
intlcm(intn,intm){
//请在这里继续完成lcm函数
returnn/gcd(n,m)*m;
}
㈨ 辗转相除法的算法
自然语言描述
用辗转相除法确定两个正整数 a 和 b(a≥b) 的最大公因数gcd(a,b):
当a mod b=0 时gcd(a,b)=b,否则
gcd(a,b) = gcd(b,a mod b)
递归或循环运算得出结果
伪代码
这个算法可以用滚戚递归写成如下:大顷陵
function gcd(a,b) {
if b<>0
return gcd(b,a mod b);
else
return a;
}
gcd 简易函数
c语言辗转相除代码:
int GCD(int a,int b)
{returnb==0?a:GCD(b,a%b);}
C++语言实现
#include<iostream>乎芦
using namespace std;
int a , b , a1 , b2 , l;
int gcd(int x , int y)
{
if(!y)
return x;
else return gcd(y , x%y);
}
int main()
{
std::cout << "请输入两个正整数,计算它们的最大公约数" << endl ;
int a , b , ans;
std::cin >> a >> b;
if(a > b)
ans = gcd(a , b);
else ans = gcd(b , a);
cout << ans;
return 0;
}
C语言实现
/*题目:输入两个正整数,求其最大公约数。*/
#include <stdio.h>
unsigned gcd ( unsigned,unsigned ) ;
int main( void )
{
unsigned m,n;
printf("请输入两个正整数:");
scanf("%u%u",&m,&n);
printf("%u与%u的最大公约数为:%u
",m,n,gcd ( m,n ) );
return 0;
}
/* 功能:返回正整数m和n的最大公约数*/
unsigned gcd ( unsigned m,unsigned n )
{
unsigned temp;
if (m<n)
{
temp=m;
m=n;
n=temp;
}
if ( m % n == 0)
{
return n;
}
else
{
return gcd ( n,m % n) ;
}
}
/*题目:输入两个非负整数u和v,求其最大公约数。*/
#include <stdio.h>main(){int u,v,r;printf("please input u and v:");scanf("%d,%d",&u,&v);while(v!=0){r=u%v;u=v;v=r;}printf("%d
",u);}
C#语言实现
static int sucDivison/*除法*/(int m, int n){int remainder = 0;if (m % n == 0){return n;}else{do{remainder = m % n;m = n;n = remainder;} while (remainder > 0);}if (n == 0){return m;}return n;}
Basic实现
INPUT m,n
DO
r=m MOD n
m=n
n=r
LOOP UNTIL r=0
PRINT m
END
Pascal实现
function gcd(a,b:integer):integer;
begin
if b=0 then gcd:=a
else gcd:=gcd (b,a mod b);
end ;
Common Lisp实现
(defun my-gcd (number-a number-b)
(do ((r (mod number-a number-b) (mod ea eb))(eb number-b r) (ea number-a eb))
((= 0 r) eb)))
Java 实现
/**
*
* @return int
* @tags @param m
* @tags @param n
* @tags @return
* @todo 【方法二】利用辗除法
*/
public static int gcd(int m, int n) {
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
Python实现
#递归解决最大公约数问题
def gcd(x,y):
if y != 0:
return gcd(y,x%y)
else:
return x
x = int(input('请输入第一个数字:'))
y = int(input('请输入第二个数字:'))
print('%d 和 %d 的最大公约数为:' %(x,y),gcd(x,y))
数据举例
其中“a mod b”是指取 a ÷ b 的余数。
例如,123456 和 7890 的最大公因子是 6,这可由下列步骤看出: a b a mod b 123456 7890 5106 7890 5106 2784 5106 2784 2322 2784 2322 462 2322 462 12 462 12 6 12 6 0 时间复杂度
辗转相除法的运算速度为 O(n),其中 n 为输入数值的位数。
辗转相除法处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍。加百利·拉梅(GabrielLamé)于1844年证明了这点,开创了计算复杂性理论。
㈩ C语言:关于用辗转相除法递归求最大公约数,下面的程序有错误,请帮我改一下,谢谢!
你孙滚好。
你的递归函数里在递归调用时忘记return了。应该是return gcd(m,n);
下面是改过的代码。我在代码里乱隐加了些注释。
#include<stdio.h>
int gcd(int m,int n)
{
int r,t;
//若m<n,交换m,n
if(m<n)
{
t=m;
m=n;
n=t;
}
r=n;
n=m%n;
m=r;
//如果n==0,m为最大公约数,否则递归
if(n==0)
return m;
else
return gcd(m,n);//递归是要return的,此处漏了
}
int main()
{
int a;
int b;
scanf("%d%d",&a,&b);
int result=gcd(a,b);
printf("%d\n"哗凯厅,result);
getch();
return 0;
}