⑴ c語言gcd函數怎麼用
求兩個數a,b的最大公約數
int gcd(int a,int b)
{
if(a==0)
{
return b;
}else
{
return gcd(b % a,a);
}
}
⑵ C語言 gcd()函數 在哪個庫
gcd是GNU編譯器特定的庫函數。
GNU編譯器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go語言的前端,也包括了這些語言的庫(如libstdc++、libgcj等等)。GCC的初衷是為GNU操作系統專門編寫的一款編譯器。GNU系統是徹底的自由軟體。
庫函數一般是指編譯器提供的可在c源程序中調用的函數。可分為兩類,一類是c語言標准規定的庫函數,一類是編譯器特定的庫函數。
⑶ gcdC語言是什麼意思
經常用這個名字做輾轉相除法的函數名
輾轉相除法又叫歐幾里得演算法, 用於求兩個整數的最大公約數。
⑷ C語言編寫遞歸函數int gcd(int m,int n),計算m和n的最大公約數
#include<stdio.h>
intgcd(intm,intn){
if(m*n==0)
return(m==0?n:m);
if(m>n)
returngcd(m%n,n);
elseif(m<n)
returngcd(n%m,m);
}
intmain(void){
intm,n;
printf("請輸入兩個數: ");
scanf("%d%d",&m,&n);
printf("其最大公約數為: ");
printf("%d ",gcd(m,n));
return0;
}
運行結果
⑸ c語言中math.h中有沒有gcd()函數
其實是有的,但不是標准庫內的函數,所謂的標准庫是指:(c標准iso/iec 9899,c++標准iso/iec 14882)。
__gcd(a,b);
這是GNU內部函數。
⑹ C語言程序,這里頭 if(a<b) return gcd(b,a); if(a%b==0) ret
gcd是函數名,這個函數的意義是用輾轉相除法求最大公約數。
這是個一個遞歸調用,return 是返回,但不一定是返回main函數,因為是遞歸,調用的有可能就是它自己,而不是main函數,所以返回給上一層調用它的那個地方。
⑺ 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語言中如何調用函數求最大公約數和最小公倍數
C語言求最大公約數和最小公倍數(2010-03-20 22:23:46)轉載標簽: 雜談 分類: 編程
求最大公約數和最小公倍數
假設有兩個數a和b,求a,b的最大公約數和最小公倍數實際上是一個問題,得出這兩個數的最大公約數就可以算出它們的最小公倍數。
最小公倍數的公式是 a*b/m
m為最大公約數
因為
a=m*i; b=m*j;
最小公倍數為 m*i*j
那麼,下面就開始計算a和b的最大公約數。
更相損減法:
《九章算術·方田》作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數。這方法除了把除法換作減法外,與輾轉相除法完全相同。例如書中求91和49的最大公因數:
91 > 49, 91 - 49 = 42
49 > 42, 49 - 42 = 7
42 > 7, 42 - 7 = 35
35 > 7, 35 - 7 = 28
28 > 7, 28 - 7 = 21
21 > 7, 21 - 7 = 14
14 > 7, 14 - 7 = 7
7 = 7, 因此91和49的最大公因數是7
輾轉相除法:
輾轉相除法是利用以下性質來確定兩個正整數 a 和 b 的最大公因數的:
若 r 是 a ÷ b 的餘數, 則
gcd(a,b) = gcd(b,r)
a 和其倍數之最大公因數為 a。
另一種寫法是:
a ÷ b,令r為所得餘數(0≤r<b)
若 r = 0,演演算法結束;b 即為答案。
互換:置 a←b,b←r,並返回第一步。
這個演算法可以用遞歸寫成如下:
function gcd(a, b) {
if a mod b<>0
return gcd(b, a mod b);
else
return a;
}
或純使用循環:
function gcd(a, b) {
define r as integer;
while b ≠ 0 {
r := a mod b;
a := b;
b := r;
}
return a
}
其中「a mod b」是指取 a ÷ b 的余數。
C語言:
#include <stdio.h>
int gcd(int a,int b)//最大公約數
{
if (a<b) return gcd(b,a);
else if (b==0) return a;
else return gcd(b,a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("最大公約數:%d\n",gcd(a,b));
printf("最小公倍數:%d\n",lcm(a,b));
}
輸入兩個正整數m和n, 求其最大公約數和最小公倍數. <1> 用輾轉相除法求最大公約數 演算法描述: m對n求余為a, 若a不等於0 則 m <- n, n <- a, 繼續求余 否則 n 為最大公約數 <2> 最小公倍數 = 兩個數的積 / 最大公約數
#include int main()
{
int m, n; int m_cup, n_cup, res;
printf("Enter two integer:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("Greatest common divisor: %d\n", n_cup);
printf("Lease common multiple : %d\n", m * n / n_cup);
}
else printf("Error!\n");
return 0;
}
★ 關於輾轉相除法, 搜了一下, 在我國古代的《九章算術》中就有記載,現摘錄如下: 約分術曰:「可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。」 其中所說的「等數」,就是最大公約數。求「等數」的辦法是「更相減損」法,實際上就是輾轉相除法。輾轉相除法求最大公約數,是一種比較好的方法,比較快。對於52317和75569兩個數,你能迅速地求出它們的最大公約數嗎?一般來說你會找一找公共的使因子,這題可麻煩了,不好找,質因子大。現在教你用輾轉相除法來求最大公約數。先用較大的75569除以52317,得商1,余數23252,再以52317除以23252,得商2,余數是5813,再用23252做被除數,5813做除數,正好除盡得商數4。這樣5813就是75569和52317的最大公約數。你要是用分解使因數的辦法,肯定找不到。那麼,這輾轉相除法為什麼能得到最大公約數呢?下面我就給大夥談談。比如說有要求a、b兩個整數的最大公約數,a>b,那麼我們先用a除以b,得到商8,余數r1:a÷b=q1…r1我們當然也可以把上面這個式子改寫成乘法式:a=bq1+r1------l)如果r1=0,那麼b就是a、b的最大公約數3。要是r1≠0,就繼續除,用b除以r1,我們也可以有和上面一樣的式子: b=r1q2+r2-------2)如果余數r2=0,那麼r1就是所求的最大公約數3。為什麼呢?因為如果2)式變成了b=r1q2,那麼b1r1的公約數就一定是a1b的公約數。這是因為一個數能同時除盡b和r1,那麼由l)式,就一定能整除a,從而也是a1b的公約數。反過來,如果一個數d,能同時整除a1b,那麼由1)式,也一定能整除r1,從而也有d是b1r1的公約數。這樣,a和b的公約數與b和r1的公約數完全一樣,那麼這兩對的最大公約數也一定相同。那b1r1的最大公約數,在r1=0時,不就是r1嗎?所以a和b的最大公約數也是r1了。有人會說,那r2不等於0怎麼辦?那當然是繼續往下做,用r1除以r2,……直到余數為零為止。在這種方法里,先做除數的,後一步就成了被除數,這就是輾轉相除法名字的來歷吧。
⑼ C語言編程用試探法(要求從大到小試探)實現函數gcd(m,n),其功能為求解正整數m、n的最大公約數。
#include<stdio.h>
voidgcd(intm,intn){
inttemp=m,i,max;
if(temp>n){
temp=n;
}
max=temp;
for(i=temp;i>=1;i--){
if(m%max==0&&n%max==0){
printf("Theresultis[%d]",max);
return;
}
max--;
}
}
intmain(){
intM,N;
scanf("[%d],[%d]",&M,&N);
gcd(M,N);
return0;
}