c語言求最大公約數for
❶ 怎樣用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;
}