當前位置:首頁 » 編程語言 » 輾轉相除c語言遞歸
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

輾轉相除c語言遞歸

發布時間: 2023-03-15 14:31:03

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;
}