C語言題 輸入兩個正整數M,N求其最大公約數與最小公倍數,用迴圈結構

2021-04-18 12:36:41 字數 5548 閱讀 3354

1樓:匿名使用者

演算法描述:

m對n求餘為a, 若a不等於0

則 m <- n, n <- a, 繼續求餘

否則 n 為最大公約數

最小公倍數 = 兩個數的積 / 最大公約數

#include

int main()

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,……直到餘數為零為止

2樓:匿名使用者

#include

void main()

a=c;b=d;

while(b!=0)

printf("最大du

公約數zhi是:

dao回%d\n",a);

printf("最小公倍答數是:%d\n",c*d/a);}

c語言程式題,輸入兩個正整數m和n,求其最大公約數和最小公倍數。 100

3樓:四舍**入

輸入兩個正整數m和n,求其最大公約數和最小公倍數,可以參考下面的**:

#include

void main ()

printf ("最大公約數是%d\n", m);//上面的演算法n=0時m這時的值就是最大公約數

printf ("最小公倍數是%d\n", p/m);//兩數的積除以最大公約數就是最小公倍數了

4樓:匿名使用者

最大公約數:(輾轉copy

相除法)

調整順序使m>=n

迴圈m=m%n; 如果m=0,則n為最大公約數,跳出迴圈。注:%表示取餘運算。

n=n%m; 如果n=0,則m為最大公約數,跳出迴圈。

next

求出最大公約數g後,用m*n/g得到最小公倍數。

5樓:匿名使用者

return;

if (m n) n :m;

int c = 0;

while ((a % b) !

bai= 0)

printf("%d and %d greatestcommondivisor = %d\n",m,n,b);

printf("%d and %d 最小

du公zhi倍dao數內為容:%d\n",m,n,b/n);

} }int main()

6樓:

#include "stdio.h"

int main(void)

printf("error, redo. ");

fflush(stdin);

}return 0;}

c語言程式設計,輸入兩個正整數m和n,求其最大公約數和最小公倍數?

7樓:匿名使用者

#include

int main()

a = num1;

b = num2;

while(b!=0)

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

printf("gongbeishu:%d\n",num1*num2/a);

}擴充套件資料:

c語言迴圈控制語句

一、while語句

1、計算while後面括號裡表示式的值,若其結果非內0,則轉容入2,否則轉3

2、執行迴圈體,轉1

3、退出迴圈,執行迴圈體下面的語句。

由於是先執行判斷後執行迴圈體,所以迴圈體可能一次都不執行。

二、do...while語句

1、執行迴圈體,轉2

2、計算while後面括號裡表示式的值,若其結果非0,則轉入1,否則轉3

3、退出迴圈,執行迴圈體下面的語句。

8樓:逮穎紹天慧

<1>用輾轉相除法求最大公約數

演算法描述:

m對n求餘為a,

若a不等於0則m

<-n,n

<-a,繼續求餘否則n

為最大公約數

<2>最小公倍數

=兩個數的積

/最大公約數

#include

intmain()

{intm,

9樓:酈秀梅杞妍

用了一種比較笨的bai方法,但是du好理解,希望zhi對你有幫助。dao

#include

void

main()

//這個函式用於求最小公倍數

intmin_num(int

x,int

y)returni;}

//這個函式用於求最大公約數

intmax_num(int

x,int

y)returni;}

10樓:證喔

#include

void main ()

printf ("最大

公約數是%d\n", m);//上面的演算法n=0時daom這時的值就是最大公約數

printf ("最小公倍數是%d\n", p/m);//兩數的積除以最大公約數就是最小公倍數了

11樓:周素芹賴庚

程式設計:bai

(1)比較已給兩數大小du,選出小zhi的intx,y

if(x

>y)則y小(2)迴圈語句dao

for(i=小的那個數;i>=1;i--)如果回i能整除兩者則輸出結果答。if(

(x/i*i==

x)&&

(y/i*i

==y))

break;

printf("最大公約數是

%d\n",i);

12樓:匿名使用者

#include

int main()

else

printf("最大公約數是%d\n", m);

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

return 0;}

改了一下上面的

13樓:眭煜牟婉靜

最大公約數:(輾轉相除法)

調整順序

使m>=n

迴圈m=m%n;

如果m=0,則n為最大公約數,跳出迴圈。注:%表示取餘運算。

n=n%m;

如果n=0,則m為最大公約數,跳出迴圈。

next

求出最大公約數g後,用m*n/g得到

最小公倍數。

c語言程式設計:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

14樓:冠夏登溪

用了一種比bai較笨的方法,du但是好理解zhi,希望對你有幫助dao

。#include

void

main()

//這個函式用於求最小公倍數

intmin_num(int

x,int

y)returni;}

//這個函式用於求最大公約數

intmax_num(int

x,int

y)returni;}

15樓:i樂於助人

#include

int main()

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

printf("lease common multiple : %d\n", m * n / n_cup);

} else printf("error!\n");

return 0;}

16樓:蘭昂位力

#include

using

namespace

std;

intmain()

c++實現輸入兩個正整數m和n,求其最大公約數和最小公倍數?

17樓:凌亂心扉

#include "stdio.h"

void main()

}if(i == c+1)

printf("沒有最大公約數 ");

c = m > n ? m : n ;           // 取 m n 中較大的數,賦值給c //

for (i = c ; i <= m*n; i++)}}

18樓:

#include

using namespace std;

int main()

num1 = a;

num2 = b;

while(num2 != 0)

cout << "最大公約數為:" << num1<< " 最小公倍數為:" << (a * b) / num1 << endl;

return 0;}

任意輸入兩個正整數m和n,求m!n!的值。c語言怎麼寫

考慮int最大儲存到16的階乘,再大就會導致資料溢位.所以可以用double來存放階乘的結果內.樓上 古風的程容序,fun函式定義成double,卻又定義了int的y來儲存階乘結果.無語.include int64 fun int a int main 用c語言編寫程式,輸入兩個正整數m和n,計算m...

從鍵盤上輸入兩個正整數m,n,判斷m能否被n整除,若能輸出m

include void main include int main else return 0 c語言程式設計 從鍵盤輸入兩個正整數m,n,判斷m能否被n整除,若能輸出m和n,否則列印 no 這是一個很簡單的分支語句問題 include int main include int main else...

c語言由鍵盤輸入正整數,C語言!!!!!!!!!!!由鍵盤輸入一個正整數,判斷該數是否為平方數,是輸出Y,否則輸出N

思路 將該數開平方得到一個數 看是不是整數,如果是說明是平方數,否則內不是 如下 include include int main else return 0 希望可以幫到你,如有疑問歡迎追問 樓主來你好。很簡單 自 include include int main printf c n pow i...