當前位置:首頁 » 編程語言 » c語言最大公約數和最小公倍數

c語言最大公約數和最小公倍數

發布時間: 2022-04-11 19:21:17

㈠ 求最大公約數和最小公倍數的方法c語言

求最大公約數和最小公倍數的方法有很多種。最樸素的是用窮舉法。從小到大窮舉來找最小公倍數。從兩個數當中的較小的一個數,開始從大到小窮舉來找最大公約數。效率比較高一點的是採用輾轉相除,法求最大公約數。得到最大公約數以後,再用兩數的乘積除以最大公約數,就得到了最小公倍數。

㈡ c語言編程求最大公約數和最小公倍數

#include<stdio.h>
int main()
{
int m,n;
int divisor,dividend,res;/*除數 被除數 余數*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{

if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)//循環體是三條語句,不加大括弧循環只執行一條語句
{
dividend=divisor;
divisor=res;
res=dividend%divisor;
}
printf("%d",divisor);
}
else
printf("error!\n");
return 0;
}
兩數相乘除以最大公約數就是最小公倍數

㈢ C語言中 用函數調用求最大公約數和最小公倍數

#include<stdio.h>
int gcd(int m, int n);
int lcd(int m, int n);
int main()
{
int a, b;
printf("輸入兩個正整數:");
scanf("%d%d", &a, &b);
printf("%d 和 %d 最大公約數為%d\n", a, b, gcd(a, b));
printf("最小公倍數為:%d\n", lcd(a, b));
}
int gcd(int m, int n)
{
int t;
if (m<n)
{
t = m;
m = n;
n = t;
}
while (n != 0)
{
t = m%n;
m = n;
n = t;
}
return m;
}
int lcd(int m, int n)
{
int t;
t = m*n / gcd(m, n);
return t;
}

㈣ C語言求最大公約數和最小公倍數

最大公約數和求最小公倍數

1、對兩個正整數a,b如果能在區間[a,0]或[b,0]內能找到一個整數temp能同時被a和b所整除,則temp即為最大公約數。

2、對兩個正整數a,b,如果若干個a之和或b之和能被b所整除或能被a所整除,則該和數即為所求的最小公倍數。

窮舉法求兩數的最大公約數

int divisor(int a,int b)

{

int temp;//定義義整型變數

temp=(a&gt;b)?b:a;//采種條件運算表達式求出兩個數中的最小值

while(temp&gt;0){

if(a%temp==0&&b%temp==0)//只要找到一個數能同時被a,b所整除,則中止循環

break;

temp--;//如不滿足if條件則變數自減,直到能被a,b所整除

}

return temp;//返回滿足條件的數到主調函數處

}

//窮舉法求兩數的最小公倍數

int multiple(int a,int b)

{

int p,q,temp;

p=(a&gt;b)?a:b;//求兩個數中的最大值

q=(a&gt;b)?b:a;//求兩個數中的最小值

temp=p;//最大值賦給p為變數自增作準備

while(1){//利用循環語句來求滿足條件的數值

if(p%q==0)

break;//只要找到變數的和數能被a或b所整除,則中止循環

p+=temp;//如果條件不滿足則變數自身相加

}

return p;

}

(4)c語言最大公約數和最小公倍數擴展閱讀:

while使用示例

C++

int a=NULL;

while(a&lt;10)

{

a++;//自加

if(a&gt;5)//不等while退出循環,直接判斷循環

{

break;//跳出循環

}

}

結果:結束後a的值為6。

javascript

下面的例子定義了一個循環程序,這個循環程序的參數i的起始值為0。該程序會反復運行,直到i大於10為止。i的步進值為1。

&lt;html&gt;

&lt;body&gt;

&lt;script type="text/javascript"&gt;

var i=0

while(i&lt;=10)

{document.write("The number is"+i);

document.write("&lt;br/&gt;");

i=i+1;}

&lt;/script&gt;

&lt;/body&gt;

&lt;/html&gt;

結果

The number is0

The number is1

The number is2

The number is3

The number is4

The number is5

The number is6

The number is7

The number is8

The number is9

The number is10

網路——while

㈤ 求最大公約數和最小公倍數用c語言

輸入兩個正整數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語言輸入兩個整數求最大公約數和最小公倍數

如果m小於n,你就把n的值給m,那麼兩個數不就相等了?

k也沒有初始化

另外m,n一直變,當你算最小公倍數的時候,m和n已經不是最開始的m和n了

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

解題步驟:

1、求最大公約數

對兩個正整數a,b如果能在區間[a,0]或[b,0]內能找到一個整數temp能同時被a和b所整除,則temp即為最大公約數。

2、求最小公倍數

對兩個正整數a,b,如果若干個a之和或b之和能被b所整除或能被a所整除,則該和數即為所求的最小公倍數。

//窮舉法求兩數的最大公約數

int divisor(int a,int b)

{

int temp;//定義義整型變數

temp=(a&gt;b)?b:a;//采種條件運算表達式求出兩個數中的最小值

while(temp&gt;0){

if(a%temp==0&&b%temp==0)//只要找到一個數能同時被a,b所整除,則中止循環

break;

temp--;//如不滿足if條件則變數自減,直到能被a,b所整除

}

return temp;//返回滿足條件的數到主調函數處

}

//窮舉法求兩數的最小公倍數

int multiple(int a,int b)

{

int p,q,temp;

p=(a&gt;b)?a:b;//求兩個數中的最大值

q=(a&gt;b)?b:a;//求兩個數中的最小值

temp=p;//最大值賦給p為變數自增作準備

while(1){//利用循環語句來求滿足條件的數值

if(p%q==0)

break;//只要找到變數的和數能被a或b所整除,則中止循環

p+=temp;//如果條件不滿足則變數自身相加

}

return p;

}

(7)c語言最大公約數和最小公倍數擴展閱讀:

用窮舉法解題時,就是按照某種方式列舉問題答案的過程。針對問題的數據類型而言,常用的列舉方法一有如下三種:

(1)順序列舉是指答案范圍內的各種情況很容易與自然數對應甚至就是自然數,可以按自然數的變化順序去列舉。

(2)排列列舉有時答案的數據形式是一組數的排列,列舉出所有答案所在范圍內的排列,為排列列舉。

(3)組合列舉當答案的數據形式為一些元素的組合時,往往需要用組合列舉。組合是無序的。

例子如下:在公元五世紀我國數學家張丘建在其《算經》一書中提出了「百雞問題」:

「雞翁一值錢5,雞母一值錢3,雞雛三值錢1。百錢買百雞,問雞翁、母、雛各幾何?」這個數學問題的數學方程可列出如下:

Cock+Hen+Chick=100

Cock*5+Hen*3+Chick/3=100

顯然這是個不定方程,適用於窮舉法求解。依次取Cock值域中的一個值,然後求其他兩個數,滿足條件就是解。

該問題的C語言程序演算法如下:

int Cock,Hen,Chick;/*定義公雞,母雞,雞雛三個變數*/

Cock=0;

while(Cock&lt;=19)/*公雞最多不可能大於19*/

{Hen=0;

whlie(Hen&lt;=33)/*母雞最多不可能大於33*/

{Chick=100-Cock-Hen;

if(Cock*15+Hen*9+Chick==300)/*為了方便,將數量放大三倍比較*/

printf(" 公雞=%d 母雞=%d 雛雞=%d",Cock,Hen,Chick);

Hen=Hen+1;

}

Cock=Cock+1;

}

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

#include <stdio.h>

int main()

{

int a,b,c,m,t;

printf("請輸入兩個數: ");

scanf("%d%d",&a,&b);

if(a<b)

{

t=a;

a=b;

b=t;

}

m=a*b;

c=a%b;

while(c!=0)

{

a=b;

b=c;

c=a%b;

}

printf("最大公約數是: %d ",b);

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

}

(8)c語言最大公約數和最小公倍數擴展閱讀

演算法思想

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

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

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

㈨ c語言編程,求兩個數的最大公約數和最小公倍數

這樣寫:
#include
void
main()
{
int
m,n,i,r,temp;
printf("請輸入第一個數的值:
");
scanf("%d",&m);
printf("請輸入第二個數的值:
");
scanf("%d",&n);
if(n>m)
{
temp=m;
m=n;
n=temp;
}
i=n;
while(i%m!=0)
{
i=i+n;
}
printf("最小公倍數是:%d
\n",i);
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
printf("最大公約數是:%d
\n",n);
}
圖:

㈩ C語言最大公約數和最小公倍數

voidmain()//輸入m和n求最大公約數和最小公倍數
{
intm=0,n=0,i,imax=0,imin=0,gongyue=0;
printf("請輸入m和n");
scanf("%d%d",&m,&n);
if(m>n)
{
imax=m;
imin=n;
}
else
{
imax=n;
imin=m;
}
for(i=1;i<=imin;i++)
{
if((imax%i==0)&&(imin%i==0))
{
gongyue=i;
}
}
printf("最大公約數為:%d,最小公倍數為:%d",gongyue,m*n/gongyue);
}
我寫的!你的不好嘿嘿,看看能能理解

熱點內容
無限分類實現php 發布:2025-05-20 06:57:40 瀏覽:681
數據結構c語言版嚴蔚敏李冬梅 發布:2025-05-20 06:55:05 瀏覽:449
iphone快捷訪問 發布:2025-05-20 06:55:05 瀏覽:928
如何加密硬碟分區 發布:2025-05-20 06:52:29 瀏覽:362
反編譯gd 發布:2025-05-20 06:52:23 瀏覽:838
java源碼知乎 發布:2025-05-20 06:47:59 瀏覽:482
dos解壓縮命令 發布:2025-05-20 06:47:57 瀏覽:638
安卓傳數據給蘋果的軟體叫什麼 發布:2025-05-20 06:42:48 瀏覽:803
怎麼樣盤解壓力 發布:2025-05-20 06:37:08 瀏覽:84
apk編譯反編譯工具 發布:2025-05-20 06:35:44 瀏覽:286