#includestdio.h
在分宜等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),分宜網(wǎng)站建設(shè)費(fèi)用合理。
intfun(intm,intn);
intfun1(intm,intn);
voidmain(){
intm,n;
do{
scanf("%d%d",m,n);
}while(m=0||n=0);
printf("%d,%d最大公約數(shù)是%d\n",m,n,fun(m,n));
printf("%d,%d最小公倍數(shù)是%d\n",m,n,fun1(m,n));
}
intfun(intm,intn){
intr,t;
if(mn){
t=m;m=n;n=t;
}
while(n!=0){//輾轉(zhuǎn)相除法
r=m%n;
m=n;
n=r;
}
returnm;
}
intfun1(intm,intn){//暴力破解法
intresult;
for(result=1;;result++){
if(result%m==0result%n==0){
break;
}
}
returnresult;
}
擴(kuò)展資料
c語(yǔ)言求兩個(gè)整數(shù)的最大公約數(shù)
#includestdio.h
#includestdlib.h
intmain()
{
inttmp,a,b;
printf("請(qǐng)輸入兩個(gè)整數(shù):\n");
scanf("%d%d",a,b);
while(a%b!=0)
{
tmp=a%b;//取余
a=b;//交換a,b可避免a比b小
b=tmp;
}
printf("%d\n",b);
return0;
}
解題步驟:
1、求最大公約數(shù)
對(duì)兩個(gè)正整數(shù)a,b如果能在區(qū)間[a,0]或[b,0]內(nèi)能找到一個(gè)整數(shù)temp能同時(shí)被a和b所整除,則temp即為最大公約數(shù)。
2、求最小公倍數(shù)
對(duì)兩個(gè)正整數(shù)a,b,如果若干個(gè)a之和或b之和能被b所整除或能被a所整除,則該和數(shù)即為所求的最小公倍數(shù)。
//窮舉法求兩數(shù)的最大公約數(shù)
int divisor(int a,int b)
{
int temp;//定義義整型變量
temp=(agt;b)?b:a;//采種條件運(yùn)算表達(dá)式求出兩個(gè)數(shù)中的最小值
while(tempgt;0){
if(a%temp==0b%temp==0)//只要找到一個(gè)數(shù)能同時(shí)被a,b所整除,則中止循環(huán)
break;
temp--;//如不滿足if條件則變量自減,直到能被a,b所整除
}
return temp;//返回滿足條件的數(shù)到主調(diào)函數(shù)處
}
//窮舉法求兩數(shù)的最小公倍數(shù)
int multiple(int a,int b)
{
int p,q,temp;
p=(agt;b)?a:b;//求兩個(gè)數(shù)中的最大值
q=(agt;b)?b:a;//求兩個(gè)數(shù)中的最小值
temp=p;//最大值賦給p為變量自增作準(zhǔn)備
while(1){//利用循環(huán)語(yǔ)句來(lái)求滿足條件的數(shù)值
if(p%q==0)
break;//只要找到變量的和數(shù)能被a或b所整除,則中止循環(huán)
p+=temp;//如果條件不滿足則變量自身相加
}
return p;
}
擴(kuò)展資料:
用窮舉法解題時(shí),就是按照某種方式列舉問(wèn)題答案的過(guò)程。針對(duì)問(wèn)題的數(shù)據(jù)類型而言,常用的列舉方法一有如下三種:
(1)順序列舉是指答案范圍內(nèi)的各種情況很容易與自然數(shù)對(duì)應(yīng)甚至就是自然數(shù),可以按自然數(shù)的變化順序去列舉。
(2)排列列舉有時(shí)答案的數(shù)據(jù)形式是一組數(shù)的排列,列舉出所有答案所在范圍內(nèi)的排列,為排列列舉。
(3)組合列舉當(dāng)答案的數(shù)據(jù)形式為一些元素的組合時(shí),往往需要用組合列舉。組合是無(wú)序的。
例子如下:在公元五世紀(jì)我國(guó)數(shù)學(xué)家張丘建在其《算經(jīng)》一書(shū)中提出了“百雞問(wèn)題”:
“雞翁一值錢5,雞母一值錢3,雞雛三值錢1。百錢買百雞,問(wèn)雞翁、母、雛各幾何?”這個(gè)數(shù)學(xué)問(wèn)題的數(shù)學(xué)方程可列出如下:
Cock+Hen+Chick=100
Cock*5+Hen*3+Chick/3=100
顯然這是個(gè)不定方程,適用于窮舉法求解。依次取Cock值域中的一個(gè)值,然后求其他兩個(gè)數(shù),滿足條件就是解。
該問(wèn)題的C語(yǔ)言程序算法如下:
int Cock,Hen,Chick;/*定義公雞,母雞,雞雛三個(gè)變量*/
Cock=0;
while(Cocklt;=19)/*公雞最多不可能大于19*/
{Hen=0;
whlie(Henlt;=33)/*母雞最多不可能大于33*/
{Chick=100-Cock-Hen;
if(Cock*15+Hen*9+Chick==300)/*為了方便,將數(shù)量放大三倍比較*/
printf("\n公雞=%d\n母雞=%d\n雛雞=%d",Cock,Hen,Chick);
Hen=Hen+1;
}
Cock=Cock+1;
}
參考資料:
百度百科——窮舉法
#include stdio.h
#include stdlib.h
//核心是輾轉(zhuǎn)相除法求最大公約數(shù),最大公約數(shù)*最小公倍數(shù) = 數(shù)1*數(shù)2
void main()
{
int num1,num2,temp;
int a,b;
printf("input two numbers:\n");
scanf("%d %d",num1,num2);
if(num1num2){
temp =num1;
num1 = num2;
num2 = temp;
}
a = num1;
b =num2;
while(b!= 0){//輾轉(zhuǎn)相除法求最大公約數(shù)
temp = a%b;
a =b;
b =temp;
}
printf("最大公約數(shù)是%d\n",a);
printf("最小公倍數(shù)是%d\n",num1*num2/a); //
}
#include? stdio.h
long long int gongyue(long long int m,long long int n){
long long int c;
if(m2 || n2) return? 44;
if(mn){
c=m%n;
while(c0){
m=n;
n=c;
c=m % n;
}
}
else{
c=n % m;
while(c0){
n=m;
m=c;
c=n % m;
}
}
m=n;
return m;
}
long long int gongbei(long long int m,long long int n){
return m/gongyue(m,n)*n;
}
int main(){
long long int a,b,c,m,n;
printf("請(qǐng)輸兩個(gè)正整數(shù)a,b:");
scanf("%lld%lld",a,b);
m=gongyue(a,b);
n=gongbei(a,b);
printf("最大公約數(shù)%lld,最小公倍數(shù)%lld\n",m,n);
return 0;
}
我代碼復(fù)制給你看。
#includestdio.h
int GCD(int a,int b) //GCD表示最大公約數(shù)
{
int z= ab?a:b; //我從輸入的兩個(gè)數(shù)中較小的那個(gè)開(kāi)始判斷是不是最大公約數(shù),不是就一直-1
while(z=1) // 直到找到能同時(shí)被X,Y整除的數(shù),它就是最大公約數(shù)了。
{
if(a%z==0b%z==0) break;//最快滿足這個(gè)條件的Z就是最大公約數(shù)
z--;
}
return z;
}
int LCM(int a,int b) //LCM表示最小公倍數(shù)
{
int z=ab?a:b; //我從輸入的兩個(gè)數(shù)中最大的那個(gè)開(kāi)始判斷是不是最小公倍數(shù),不是就一直+1
while(z=(a*b)) //兩個(gè)非零數(shù)a,b,我們知道a*b肯定是它的公倍數(shù) ,所以從兩個(gè)數(shù)的最大那個(gè)數(shù)開(kāi)始
{ //一直到a*b肯定存在最小公倍數(shù)
if(z%a==0z%b==0)break; //最快滿足這個(gè)條件的Z就是最小公倍數(shù)
z++;
}
return z;
}
int main()
{
while(1)
{
int x,y,z,d;
printf("請(qǐng)輸入兩個(gè)整數(shù):");
scanf("%d %d",x,y);
z=GCD(x,y);
d=LCM(x,y);
printf("這兩個(gè)數(shù)的最大公約數(shù)是%d\n",z);
printf("這兩個(gè)數(shù)的最小公倍數(shù)是%d\n",d);
printf("\n");
}
}
按照數(shù)學(xué)定義求。
最簡(jiǎn)單的 從較大數(shù)開(kāi)始,一直累加出一個(gè)兩個(gè)的共同倍數(shù)。
也可以先求最大公約數(shù) 然后用兩個(gè)數(shù)的積除以最大公約數(shù)
int?func(int?a,?int?b)
{
int?r;
for(?r=a;?;?r++)
if(r%a==0??r%b==0)?break;
return?r;
}