C語言中如何呼叫函式求最大公約數和最小公倍數

2021-03-07 03:55:24 字數 5532 閱讀 4453

1樓:鍋鋼

先編寫好最大公約數和最小公倍數的函式,如下:

int ***(int a,b) //求最大公約數函式int lcm(int a,b) //求最小公約數函式然後在main()主函式中呼叫***()函式和lcm()函式即可。(注:回答者編寫的兩個函式分別為求兩個數的最大公約數和最小公倍數)。

如有錯誤,請多加原諒。

2樓:3d動畫師

# include

void main()

int fy(int x,int y)

return k;

}int fb(int x,int y)

return i;}

3樓:匿名使用者

#include

int main ()

p=n*m; //先將n和m的乘積儲存在p中, 以便求最小公倍數時用

while (m!=0) //求n和m的最大公約數

printf("hcf=%d\n",n);

是原來兩個整數的乘積

return 0;}

4樓:匿名使用者

1.計算兩個整數的最大公因子(最大公約數)的歐幾里得演算法描述:

輸入:兩個非負整數a,b,且a>=b;

輸出:a,b的最大公因子;

1).當b!=0時,做如下操作:

1.1 令r=a%b,a=b,b=r。

2).返回(a);

2.**如下:

#include

這是本人的csdn地址

5樓:匿名使用者

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 的餘數, 則

***(a,b) = ***(b,r)

a 和其倍數之最大公因數為 a。

另一種寫法是:

a ÷ b,令r為所得餘數(0≤r<b)

若 r = 0,演演算法結束;b 即為答案。

互換:置 a←b,b←r,並返回第一步。

這個演算法可以用遞迴寫成如下:

function ***(a, b)

或純使用迴圈:

function ***(a, b)

return a

}其中「a mod b」是指取 a ÷ b 的餘數。

c語言:

#include

int ***(int a,int b)//最大公約數

printf("greatest ***mon divisor: %d\n", n_cup);

printf("lease ***mon 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語言求最大公約數和最小公倍數

6樓:非同尋常

if(m%i==0 ||n%i==0) x=i;

這句有問題吧

應該是if(m%i==0 &&n%i==0) x=i;

7樓:匿名使用者

main( )

p=n*m; /*先將n和m的乘積儲存在p中,以便求最小公倍數時用*/

r=n%m;

while(r!=0) /*求n和m的最大公約數*/

printf(" gongyueshu: %d\n",m);

printf(" gongbeishu: %d\n",p/m); /*p是原來兩個整數的乘積*/

}運**況:

input n and m :12,8↙

gongyueshu: 4

gongbeishu:24

8樓:

#include

void func(int p, int q)printf("the min multiple is: %d\n", product/p);

printf("the max divisor is: %d\n", p);

}int main()

9樓:光玉石果青

main()

a=num1;

b=num2;

while(b!=0)

printf("最大答

公約數是:%d\n",a);

prinft("最小公倍數是:%d\n",num1*num2/a);}

10樓:承源張月怡

//m,n大小順序bai

可以du任意,但是要在zhiint範圍dao內,也可以自己回改下定

答義#include

main()

printf("%d,%d\n",m,b/m;);}

c語言如何求最大公約數和最小公倍數

11樓:**ile灬微光丶

#include

int main()

m=a*b;

c=a%b;

while(c!=0)

printf("最大公約數是

:\n%d\n",b);

printf("最小公倍數是:\n%d\n",m/b);

}擴充套件資料演算法思想

利用格式輸入語句將輸入的兩個數分別賦給 a 和 b,然後判斷 a 和 b 的關係,如果 a 小於 b,則利用中間變數 t 將其互換。

再利用輾轉相除法求出最大公約數,進而求出最小公倍數。最後用格式輸出語句將其輸出。

#include是在程式編譯之前要處理的內容,稱為編譯預處理命令。編譯預處理命令還有很多,它們都以「#」開頭,並且不用分號結尾,所以是c語言的程式語句。

12樓:用著追她

1、首先開啟codeblocks,建立一個新專案。專案語言,選擇「c」, 我們將專案名稱命名為「回maxandmin」。

2、創答建好專案後,我們開啟 「main.c」檔案。

3、完成輸入功能其中m和n是輸入的兩個數,num是將來儲存的最大公約數。num的值是由後面我們定義的函式,來賦值的。

4、要強制使用者輸入正確的數for(;;)表示一個死迴圈 同樣使用while(true)也可達到死迴圈效果。

5、接下來,當使用者輸入合法之後。我們就要寫else的情況了。

6、當得到的餘數r不是0,就表示 m和n之間不是倍數關係。那麼我們將m的值改為n,n中從存取r 再次執行r=m%n 。意思就是,反覆的用餘數取模餘數,直到0位置。

就是n中存的就為最大公因數了。

7、接下來執行,我們輸入 6,3 其中3就是最大公因數,6是最小公倍數。

13樓:

最大公約數用dueuclid求就可以,有性zhi質 ***(a,b) = ***(b,a mod b)int ***(int a,int b)

while(b!=0)/*輾除法答

,直到b為0為止*/

return a;

}最小公倍數就是 a*b/***(a,b)

14樓:blue丶小

dev-cpp 5.4  純c語言環境du,通過編譯:

#include

int max(int a,int b)

int min(int a,int b)

int main()

C語言中求最大公約數v,誰幫忙解釋下下面這段話的原理

輾轉相除法求兩個數的最大公約數的步驟如下 先用小的一個數除大的一個數,得第一個餘數 再用第一個餘數除小的一個數,得第二個餘數 又用第二個餘數除第一個餘數,得第三個餘數 這樣逐次用後一個數去除前一個餘數,直到餘數是0為止。那麼,最後一個除數就是所求的最大公約數 如果最後的除數是1,那麼原來的兩個數是互...

C語言用輾轉相除法求兩個正整數的最大公約數

include void main printf d m include int int n,int m t n m while t return m end int r,t r n m while r 0 return m c語言程式 用 輾轉相除法 求兩個正整數的最大公約數 程式填空 defin...

c語言中反三角函式的呼叫,C語言中反三角函式的呼叫

反3角函式有 acos double asin double atan double atan double,double 返回值 double 型,弧度值。轉角度要 180.0 3.1416。例如 1 include 2 include 3 include 4 int main 5 1 反三角函式...