當前位置:首頁 » 編程語言 » c語言求最大公約數for

c語言求最大公約數for

發布時間: 2022-10-31 11:00:02

❶ 怎樣用c語言求兩個數的最大公約數

#include<stdio.h>
intmain()
{
intm,n,temp,i;
printf("Inputm&n:");
scanf("%d%d",&m,&n);
if(m<n)/*比較大小,使得m中存儲大數,n中存儲小數*/
{/*交換m和n的值*/
temp=m;
m=n;
n=temp;
}
for(i=n;i>0;i--)/*按照從大到小的順序尋找滿足條件的自然數*/
if(m%i==0&&n%i==0)
{/*輸出滿足條件的自然數並結束循環*/
printf("TheGCDof%dand%dis:%d ",m,n,i);
break;
}

return0;
}

❷ C語言 求最大公約數

//只貼圖不方便調試,下次請直接上代碼
//給你一個現成的吧.
#include<stdio.h>
intgcd(inta,intb)
{
intt=0;
while(a){
if(a%b==0)
returnb;
else
{
t=a%b;
a=b;
b=t;
}
}
}

intyin(inta,intb)
{
returna*b/gcd(a,b);
}

intmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("最大公因數%d,最小公倍數%d:",gcd(a,b),yin(a,b));
return0;
}

❸ c語言求最大公約數

求差判定法.

如果兩個數相差不大,可以用大數減去小數,所得的差與小數的最大公約數就是原來兩個數的最大公約數.例如:求78和60的最大公約數.78-60=18,18和60的最大公約數是6,所以78和60的最大公約數是6.

如果兩個數相差較大,可以用大數減去小數的若干倍,一直減到差比小數小為止,差和小數的最大公約數就是原來兩數的最大公約數.例如:求92和16的最大公約數.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公約數是4,所以92和16的最大公約數就是4.

輾轉相除法.

當兩個數都較大時,採用輾轉相除法比較方便.其方法是:

以小數除大數,如果能整除,那麼小數就是所求的最大公約數.否則就用余數來除剛才的除數;再用這新除法的余數去除剛才的余數.依此類推,直到一個除法能夠整除,這時作為除數的數就是所求的最大公約數.

例如:求4453和5767的最大公約數時,可作如下除法.

5767÷4453=1餘1314

4453÷1314=3餘511

1314÷511=2餘292

511÷292=1餘219

292÷219=1餘73

219÷73=3

於是得知,5767和4453的最大公約數是73.

輾轉相除法適用比較廣,比短除法要好得多,它能保證求出任意兩個數的最大公約數.

--------------------------------------------------------------------------------

小學數學溫習過後,先來個兩個數遞歸版的

int GetGCDRec(int n, int m)
{
if (m < n)
{
m ^= n;
n ^= m;
m ^= n;
}

if (n == 0)
return m;
else
return GetGCDRec(n, m % n);
}
輾轉相除法,求一個數組中所有數的最大公約數

int GetGCD(int *arr, int len)
{
int iMax = arr[0], iCurr, iRemainder;

for(int i = 1; i < len; i++)
{
iCurr = arr[i];

if (iMax < iCurr)
{
iMax ^= iCurr;
iCurr ^= iMax;
iMax ^= iCurr;
}

iRemainder = iMax % iCurr;

while (iRemainder)
{
iMax = iCurr;
iCurr = iRemainder;
iRemainder = iMax % iCurr;
}

iMax = iCurr;
}//for

return iMax;

}
最小公倍數就是乘積除以最大公約數

int GetLCM(int *arr, int len)
{
int multiple = 1;

for (int i = 0; i < len; i++)
multiple *= arr[i];

return multiple / GetGCD(arr, len);
}

❹ C語言程序設計如何求最大公約數

具體操作步驟如下:

一、新建一個C語言源程序,使用Visual C++6.0的軟體。

❺ 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);

}

(5)c語言求最大公約數for擴展閱讀

演算法思想

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

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

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

❻ c語言;用for語句求正整數a,b的最大公約數

#include<stdio.h>
#include<stdlib.h>
intgcd(inta,intb)
{
inttemp;
if(a<b){/*交換兩個數,使大數放在a上*/
temp=a;
a=b;
b=temp;
}
while(b!=0){/*利用輾除法,直到b為0為止*/
temp=a%b;
a=b;
b=temp;
}
returna;
}
main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d",gcd(a,b));
system("pause");
return0;
}

❼ c語言問題 求n個數最大公約數

#include<stdio.h>
main(void)
{inta[9],n,t,i,temp1,temp2,c,d;
printf("請輸入您所要輸入的數字個數(須在2-9之間) ");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
}
if(a[0]<a[1])
{temp1=a[0];
a[0]=a[1];
a[1]=temp1;
}
while(a[0]%a[1]!=0)
{c=a[0];
a[0]=a[1];
a[1]=c%a[1];
}
a[0]=a[1];
for(i=0;i<n;i++)
{if(a[0]<a[i])
{temp2=a[0];
a[0]=a[i];
a[i]=temp2;
}
while(a[0]%a[i]!=0)
{d=a[0];
a[0]=a[i];
a[i]=d%a[i];
}
a[0]=a[i];
}
printf("您所輸入的數字最大公約數為%d",a[0]);

}

❽ C語言程序設計如何求最大公約數

求最大公約數演算法:

(1)輾轉相除法

兩整數a和b:

① a%b得余數c

② 若c=0,則b即為兩數的最大公約數,結束

③ 若c≠0,則a=b,b=c,再回去執行①

(2)相減法

兩整數a和b:

① 若a>b,則a=a-b

② 若a<b,則b=b-a

③ 若a=b,則a(或b)即為兩數的最大公約數,結束

④ 若a≠b,則再回去執行①

(3)窮舉法:

① i= a b中的小數

② 若a,b能同時被i整除,則i即為最大公約數,結束

③ i--,再回去執行②

相關代碼:

#include<stdio.h>
intxc_gcd(inta,intb)
{
intc;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
returnb;
}
intxj_gcd(inta,intb)
{
while(a!=b)
{
if(a>b)
a-=b;
else
b-=a;
}
returnb;
}
intqj_gcd(inta,intb)
{
inti;
i=(a>b)?a:b;
while(a%i!=0&&b%i!=0)
i--;
returni;
}
voidmain()
{
//inta=36,b=27;
//inta=27,b=36;
inta=100,b=201;
printf("a=%db=%d ",a,b);
printf("輾轉相除法求最大公約數=%d ",xc_gcd(a,b));
printf("相減法求最大公約數=%d ",xc_gcd(a,b));
printf("窮舉法求最大公約數=%d ",xc_gcd(a,b));
}

運行效果圖:

❾ C語言求最大公約數的代碼

你的代碼,主要的錯誤在for循環里的判斷條件,應該是a%i!=0&&b%i!=0
不等號;但是,是了很久,發現這樣的演算法或者說思路也是錯誤的!因為你這樣找到的只是兩個數的最小公約數,而非最大公約數的,你可以用原來的想法,i

兩個數中較小者那個從大到小去循環,從而找到兩個數的公約數,也就是(從大到小)倒這來找公約數;或者建議你考慮輾轉相除法,輾轉相除法的思路是這樣的:若
m和n為這連個正整數,有:當m>n,m與n
的最大公約數等於
n

m%n的最大公約數當n=0
,m與
n
的最大公約數等於
m,以下是演算法,使用for語句:#include<stdio.h>
#include<windows.h>
int
main(){
int
a,b,m,n,r;
printf("輸入兩個正整數(請用逗號隔開):");
scanf("%d%d",&a,&b);
if(a>b)
{
m=a;
n=b;
}
else
{
m=b;
n=a;
}
for(r=b;r!=0;){
r=m%n;
m=n;
n=r;
}
printf("%d

%d
的最大公約數是:%d\n",a,b,m);
system("PAUSE");
return
0;
}

熱點內容
網路連接演算法 發布:2025-01-08 19:59:07 瀏覽:429
函數三種演算法 發布:2025-01-08 19:59:07 瀏覽:411
榮耀6清除緩存 發布:2025-01-08 19:57:37 瀏覽:780
安卓怎麼下載國外飛機聊天軟體 發布:2025-01-08 19:56:35 瀏覽:254
花瓣壓縮 發布:2025-01-08 19:45:51 瀏覽:859
重裝系統怎麼設置伺服器 發布:2025-01-08 19:40:08 瀏覽:720
谷歌解壓版 發布:2025-01-08 19:35:27 瀏覽:743
c語言找零錢 發布:2025-01-08 19:35:25 瀏覽:1004
壓縮大聲音 發布:2025-01-08 19:32:08 瀏覽:531
yy易語言源碼 發布:2025-01-08 19:24:42 瀏覽:886