⑴ c語言輾轉相除法
按照你的改了一下
#include<stdio.h>
intgcd(intx,inty)
{
inti;
intmax,min;
(x>y)?(max=x,min=y):(max=y,min=x);
if(i=max%min!=0)
do{
i=min;
min=max%min;
max=i;
}while(min!=0);
returnmax;
}
intmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d ",gcd(a,b));
return0;
}
再給你一個精簡版,二者實質是一樣的
#include<stdio.h>
intgcd(intx,inty)
{
if(y==0)returnx;
returngcd(y,x%y);
}
intmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d ",gcd(a,b));
return0;
}
⑵ c語言求最大公約數輾轉相除法
int main(void)
{
printf("這是兩個整數求最大公約數的算式,請輸入兩個不相等的正整數,並按回車鍵確認:\n"); //操作提示
intm,n,r,i; //定義四個整形變數
scanf("%d %d",&m,&n); //輸入m和n的值
if(m<n) {i=m;m=n;n=i;} //如果m<n,借用變數i進行m和n的數值互換
while(m%n!=0) //m取模n 賦值給r
{r=a%b;m=n;n=r;} //余數不等於0,則n的值給m,r的值給n,再次進入循環
printf("它們的最大公約數是%d\n",n);
system("PAUSE");
return 0;
}
⑶ 輾轉相除法c語言代碼
輾轉相除法用來求兩個數的最大公約數,代碼如下:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta,b,r;
scanf("%d%d",&a,&b);
while(b!=0)//當其中一個數為0,另一個數就是兩數的最大公約數
{
r=a%b;
a=b;
b=r;
}
printf("GreatestCommonDivisor:%d ",a);
system("pause");
}
運行結果:
⑷ 什麼是c語言裡面的輾轉相除法
用輾轉相除法(即歐幾里得演算法)求兩個正整數的最大公約數。
解析:
設兩個數m,n,假設m>=n,用m除以n,求得余數q。若q為0,則m為最大公約數;若q不等於0,則進行如下迭代:
m=n,n=q,即原除數變為新的被除數,原余數變為新的除數重復演算法,直到余數為0為止。余數為0時的除數n,即為原始m、n的最大公約數。
迭代初值:m,n的原始值;
迭代過程:q=m%n;
m=n;
n=q;
迭代條件:q!=0
例如:m=8;n=6
q=m%n(8%6==2)
m=n(m==6)
n=q(n==2)
因為:(q==2)!=0,重復演算法:
q=m%n(6%2==0)
m=n(m==2)余數為0時的除數n為最大公約數,n值賦給了m,所以輸出m的值
n=q(n==0)
因為:q==0 所以最大公約數為m的值
源程序:
#include<stdio.h>
void main()
{
int m,n,q,a,b;
printf("Enter two integers:");
scanf("%d%d",&a,&b);
m=a;
n=b;
if(n>m)
{
int z;
z=m;m=n;n=z;//執行演算法前保證m的值比n的值大
}
do
{
q=m%n;
m=n;
n=q;
}while(q!=0);
printf("The greatest common divisor of");
printf("%d,%d is %d\n",a,b,m);
}
希望對你有所幫助!
⑸ C語言函數輾轉相除法!
#include <stdio.h>
/*輾轉相除法函數*/
int gcd_div(int a,int b)
{
if (b == 0) {
return a;
} else {
return gcd_div(b,a % b);
}
}
/*更相減損法函數*/
int gcd_sub(int a,int b)
{
int ma,mb;
a>b?(ma=a,mb=b):(ma=b,mb=a);
if (mb == 0) {
return ma;
} else {
return gcd_sub(ma-mb,mb);
}
}
int main()
{
int a = 28,b = 21;
printf("最大公約數(減法):(%d %d)%d\n",b,a,gcd_sub(b,a));
printf("最大公約數(除法):(%d %d)%d\n",b,a,gcd_div(a,b));
return 0;
}
⑹ 輾轉相除法求最大公約數c語言代碼
輾轉相除法是在在維基網路中的意思是:
在數學中,輾轉相除法,又稱歐幾里得演算法(英語:Euclidean algorithm),是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
兩個整數的最大公約數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如,252和105的最大公約數是21( {\displaystyle 252=21\times 12;105=21\times 5} {\displaystyle 252=21\times 12;105=21\times 5});因為 252 − 105 = 21 × (12 − 5) = 147 ,所以147和105的最大公約數也是21。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。這時,所剩下的還沒有變成零的數就是兩數的最大公約數。由輾轉相除法也可以推出,兩數的最大公約數可以用兩數的整數倍相加來表示,如 21 = 5 × 105 + (−2) × 252 。這個重要的結論叫做裴蜀定理。
在現代密碼學方面,它是RSA演算法(一種在電子商務中廣泛使用的公鑰加密演算法)的重要部分
簡單的來說輾轉相除法的原理就是:
先比較兩個數使第一個數為最大數a,第二個數為最小數b
使最大數%最小數得到余數a%b=temp
後將余數賦值給最小數a=temp再去除最大數b即b%a
一直往復直到余數不為0
⑺ C語言輾轉相除法問題怎麼做
#include <stdio.h>
int fun(int a,int b) /* 2個數的公約數 */
{
int t;
while(b)
{
t = a%b;
a = b;
b = t;
}
return a;
}
int main()
{
int a[100];
int n;
int i;
int res;
scanf("%d",&n); /* 先輸入數的總數n */
if(n < 2)
{
printf("n不能小於2
");
return 0;
}
for(i=0;i<n;i++) /* 輸入n個數 */
scanf("%d",&a[i]);
res = fun(a[0],a[1]);
for(i=2;i<n;i++)
res = fun(res,a[i]);
printf("%d
",res);
return 0;
}
⑻ C語言輾轉相除法
例如用輾轉相除法求a b 最大公約數(a b誰大誰小無所謂):
int GCD( int a , int b )
{
int n=a%b;
whie(n != 0) //即: while(n)
{
a = b;
b = n;
n = a % b;
}
return b; //注意這里返回的是b 不是n
}
⑼ c語言編程,利用輾轉相除法求公約數
輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm)乃求兩個正整數之最大公因子的演算法。
其原理如下:
設兩數為a、b(b<a),用gcd(a,b)表示a,b的最大公約數,r=a (mod b) 為a除以b以後的余數,k為a除以b的商,即a÷b=k.......r。輾轉相除法即是要證明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),則設a=mc,b=nc
第二步:根據前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根據第二步結果可知c也是r的因數
第四步:可以斷定m-kn與n互質【否則,可設m-kn=xd,n=yd (d>1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)dc,b=nc=ycd,故a與b最大公約數成為cd,而非c,與前面結論矛盾】
從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)。
證畢。
以上步驟的操作是建立在剛開始時r!=0的基礎之上的。即m與n亦互質。
按照其規則,C語言實現如下:
intGCD(inta,intb)
{returnb==0?a:GCD(b,a%b);}
⑽ c語言中,用輾轉相除法計算兩個數的最大公約數的具體方法是怎樣的
#include <stdio.h>
int gcd(int a, int b) {
int r;
do {
r = a % b;
a = b;
b = r;
} while (r);
return a;
}
int main(void) {
int a, b;
printf("Input two integers: \n");
scanf("%d%d", &a, &b);
printf("The greatest common divisor is: %d\n", gcd(a, b));
return 0;
}
原理:
輾轉相除法是利用以下性質來確定兩個正整數 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余數,則
gcd(a,b) = gcd(b,r)
2. a 和其倍數之最大公因子為 a。
另一種寫法是:
1. a ÷ b,令r為所得余數(0≤r<b)
若 r = 0,演算法結束;b 即為答案。
2. 互換:置 a←b,b←r,並返回第一步