① c語言函數編寫,求兩個整數的最大公約數和最小公倍數
編寫該程序的整體思路:分別定義最大公約數函數和最小公倍數函數,然後再main函數裡面調用它。C語言實現代碼如下:
#include<stdio.h>
#include<math.h>
intfun_gy(int,int); //聲明最大公約數函數
intfun_gb(int,int); //聲明最小公倍數函數
main()
{
inta,b,gy,gb;
printf("輸入兩個整數: ");
scanf("%d%d",&a,&b);
gy=fun_gy(a,b); //調用最大公約數函數
gb=fun_gb(a,b); //調用最小公倍數函數
printf("最大公約數是:%d 最小公倍數是:%d ",gy,gb);
}
intfun_gy(intx,inty)
{
intz,i;
if(x>y)
z=sqrt(y);
else
z=sqrt(x);
for(i=z;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
returni;
}intfun_gb(intx,inty)
{
intz,i;
z=x*y;
for(i=x;i<=z;i++)
{
if(i%x==0&&i%y==0)
break;
}
returni;
}程序運行結果:
(1)c語言調用函數求最小公約數擴展閱讀:
這里涉及到了最大公約數和最小公倍數的計算方法:
我們知道兩個整數的最小公倍數等於他們的乘積除以他們的最大公約數。所以關鍵還是最大公約數的計算。
輾轉相除法(求最大公約數):
假設求a,b的最大公約數,則:
(1)a除以b取余得c,若c=0,則b即為兩數的最大公約數,輸出,結束。
(2)若c != 0,則將b賦給a,c賦給b再返回上一步操作,繼續執行。
例如,求30和98的最大公約數,過程如下:
90%30 = 8;
30%8 = 6;
8%6 = 2;
6%2 = 0;
所以最大公約數為2。
② C語言中 用函數調用求最大公約數和最小公倍數
#include
<stdio.h>
/*求最大公約數和最小公倍數*/
int
f(int
m,int
n)
{
int
c;
while(n
>
0)
{
c=m%n;
m
=
n;
n
=
c;
}
return
(m);
}
/*
//求最大公約數和最小公倍數
//遞歸求最小公倍數
int
f(int
m,int
n)
{
return
(n
>0)?
f(m,m%n):m;
}
*/
int
main(void)
{
int
m,n,a;
int
f(int
m,int
n);
printf("please
input
two
numbles:");
scanf("%d,%d",&m,&n);
printf("the
max
is
%d\n",f(m,n));//最大公約數
printf("the
min
is
%d\n",m*n/f(m,n));//最小公倍數
system
("pause");
return
0;
}
參照了網路的gcd,即碾轉相除法,是歐幾里得的幾何原本中的。
③ C語言中,用函數調用求最大公約數和最小公倍數
#include<stdio.h> //最大公因子,最小公倍數
void main()
{
int a,b,num1,num2,temp;
scanf("%d%d",&num1,&num2);
if(num1<num2)
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
printf("%d\n",a);
printf("%d\n",num1*num2/a);
}
④ 求最小公約數c語言
沒有「最小公約數」,只有「最小公倍數」。
最大公約數:
指兩個或多個整數共有約數中最大的一個。
最小公倍數:
指兩個或多個整數公有的倍數中最小的一個,另外,公約數,亦稱「公因數」。它是一個能被若干個整數同時均整除的整數。」
C語言4種常見演算法:
//C語言實現 四種方法求最大公約數
// 2019 03
// WANTING WANG
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
//輾轉相除法
int gcd(int a,int b)
{
if(a%b==0)
return b;
else;
return gcd(b,a%b);
}
//窮舉法
int divisor (int a, int b) //自定義函數求兩數的最大公約數
{
int temp;//定義整型變數
temp=(a>b)?b:a;//采種條件運算表達式求出兩個數中的最小值
while(temp>0)
{
if(a%temp==0&&b%temp==0)//只要找到一個數能同時被a,b所整除,則中止循環
break;
temp--;//如不滿足if條件則變數自減,直到能被a,b所整除
}
return (temp);//返回滿足條件的數到主調函數處
}
//更相減損法
int gcd2(int m,int n)
{
int i=0,temp,x;
while(m%2==0&&n%2==0)//判斷m和n能被多少個2整除
{
m/=2;
n/=2;
i+=1;
}
if(m<n)//m保存大的值
{
temp=m;
m=n;
n=temp;
}
while(x)
{
x=m-n;
m=(n>x)?n:x;
n=(n<x)?n:x;
if(n==(m-n))
break;
}
if(i==0)
return n;
else
return (int) pow(2,i)*n;
}
//Stein演算法
int Stein( unsigned int x, unsigned int y )
/* return the greatest common divisor of x and y */
{
int factor = 0;
int temp;
if ( x < y )
{
temp = x;
x = y;
y = temp;
}
if ( 0 == y )
{
return 0;
}
while ( x != y )
{
if ( x & 0x1 )
{/* when x is odd */
if ( y & 0x1 )
{/* when x and y are both odd */
y = ( x - y ) >> 1;
x -= y;
}
else
{/* when x is odd and y is even */
y >>= 1;
}
}
else
{/* when x is even */
if ( y & 0x1 )
{/* when x is even and y is odd */
x >>= 1;
if ( x < y )
{
temp = x;
x = y;
y = temp;
}
}
else
{/* when x and y are both even */
x >>= 1;
y >>= 1;
++factor;
}
}
}
return ( x << factor );
}
int main()
{
int i;
int a[30];
for(i=0;i<30;i++)
{
a[i]=rand()%100 + 1;
printf("%d ",a[i]);
}
printf("
");
int b[30];
for(i=0;i<30;i++)
{
b[i]=rand()%100 + 1;
printf("%d ",b[i]);
}
printf("
");
clock_t start,finish;
double r;
start= clock();
for(i=0;i<30;i++)
{
//printf("輾轉相除法所得最大公約數為:%d
",gcd(a[i],b[i]));
//printf("窮舉法所得最大公約數為:%d
",divisor(a[i],b[i]));
printf("更相減損法所得最大公約數為:%d
",gcd2(a[i],b[i]));
//printf("Stein演算法所得最大公約數為:%d
",Stein(a[i],b[i]));
}
finish=clock();
r=(double)(finish-start)/CLOCKS_PER_SEC;
printf("運行所用的時間為:%lf s
",r);
return 0;
}
⑤ C語言中如何調用函數求最大公約數和最小
#include<stdio.h>
int gys(int x,int y)
{
inti;
for(i=y;i>=1;i--)
{
if(x%i==0&&y%i==0)
{
returni;
}
}
}
int gbs(int x,int y,int g)
{
returnx*y/g;
}
int main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d%d",gys(a,b),gbs(a,b,gys(a,b)));
return0;
}
⑥ C語言用函數求最大公約,最小公約數
最小公倍數時t應該從1開始,而不是0,0不能放到%後面,且你求的最小公倍數,應該t%y==0&&t%x==0,而不是x%t == 0 && y%t == 0
⑦ C語言中用兩個函數求最大公約數和最小公倍數,用主函數調用這兩個函數並輸出結果。
先編寫好最大公約數和最小公倍數的函數,如下:intgcd(inta,b)//求最大公約數函數{if(a%b==0)returnb;elsereturngcd(b,a%b);//輾轉相除法}intlcm(inta,b)//求最小公約數函數{intx;x:=gcd(a,b);//調用gcd()函數returna*
⑧ C語言求最小公約數
數學中常用到的是最大公約數,和最小公倍數。這是因為最小公約數和最大公倍數都沒有實際的意義。其中,最小公約數確實是1,最大公倍數為+無窮。
⑨ C語言題目:寫一個求最大公約數和最小公倍數的函數。並調用函數。
#include <stdio.h>
void main()
{
int a,b;
printf("請輸入兩個數:");
scanf("%d%d",&a,&b);
int gys(int a,int b);
int gbs(int a,int b);
printf("最大公約數=%d",gys(a,b));
printf("最小公倍數=%d",gbs(a,b));
}
int gys(int a,int b)
{
int gys,i;
for(i=1;i<=a&&i<=b;i++)
if(a%i==0&&b%i==0)
gys=i;
return(gys);
}
int gbs(int a,int b)
{
int gbs;
gbs=a*b/gys(a,b);
return(gbs);
}
⑩ c語言 要求調用自編函數求最大公約數
while(scanf("%d,%d",&x,&y),x<=0||y<=0);