成语| 古诗大全| 扒知识| 扒知识繁体

当前位置:首页 > 知识百科

C语言求最大公约数最小公倍数

Q1:C语言求最大公约数和最小公倍数

if(m%i==0n%i==0) x=i;
这句有问题吧
应该是if(m%i==0 &&n%i==0) x=i;

Q2:c语言如何求最小公倍数和最大公约数

解题步骤:

1、求最大公约数

对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

2、求最小公倍数

对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。

//穷举法求两数的最大公约数

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 multiple(int a,int b)

{

int p,q,temp;

p=(a>b)?a:b;//求两个数中的最大值

q=(a>b)?b:a;//求两个数中的最小值

temp=p;//最大值赋给p为变量自增作准备

while(1){//利用循环语句来求满足条件的数值

if(p%q==0)

break;//只要找到变量的和数能被a或b所整除,则中止循环

p+=temp;//如果条件不满足则变量自身相加

}

return p;

}

扩展资料:

用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:

(1)顺序列举是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。

(2)排列列举有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。

(3)组合列举当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。

例子如下:在公元五世纪我国数学家张丘建在其《算经》一书中提出了“百鸡问题”:

“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”这个数学问题的数学方程可列出如下:

Cock+Hen+Chick=100

Cock*5+Hen*3+Chick/3=100

显然这是个不定方程,适用于穷举法求解。依次取Cock值域中的一个值,然后求其他两个数,满足条件就是解。

该问题的C语言程序算法如下:

int Cock,Hen,Chick;/*定义公鸡,母鸡,鸡雏三个变量*/

Cock=0;

while(Cock<=19)/*公鸡最多不可能大于19*/

{Hen=0;

whlie(Hen<=33)/*母鸡最多不可能大于33*/

{Chick=100-Cock-Hen;

if(Cock*15+Hen*9+Chick==300)/*为了方便,将数量放大三倍比较*/

printf("\n公鸡=%d\n母鸡=%d\n雏鸡=%d",Cock,Hen,Chick);

Hen=Hen+1;

}

Cock=Cock+1;

}

百度百科——穷举法

Q3:求助C语言求最大公约数和最小公倍数

编译通过
#include
int GongyueMax(int a,int b)
{int i,f;
for(i=1;i<=(a{if(a%i==0&&b%i==0){f=i;break;}}
return(f);}
int GongbeiMin(int c,int d)
{int j,g;
for(j=c*d;j>=(c>d)?c:d;j--)
{if(j%c==0&&j%d==0) {g=j;break;}}
return(g);}
void main()
{int x,y,p,q;
scanf("%d,%d",&x,&y);
p=GongyueMax(x,y);
q=GongbeiMin(x,y);
printf("GongyueMax=%d,GongbeiMin=%d\n",p,q);
}
for(i=1;i<=(a=(c>d)?c:d;j--)
找到要的数后要跳出循环的
wWw.BAz%hishi.cOm

Q4:c语言最大公约数和最小公倍数怎么表示

辗转相除法求最大公约数和最小公倍数
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
#include
void main()/*辗转相除法求最大公约数 */
{
int m, n, a, b, t, c;
printf("Input two integer numbers:\n");
scanf("%d%d", &a, &b);
m=a;n=b;
while(b!=0)/* 余数不为0,继续相除,直到余数为0 */
{ c=a%b; a=b;b=c;}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
}

Q5:C语言中如何调用函数求最大公约数和最小公倍数?

# include
void main()
{
int fy(int x,int y);
int fb(int x,int y);
int a,b;
printf("请输入两整数:\n");
scanf("%d %d",&a,&b);
printf("最大公约数是:%d\n",fy(a,b));
printf("最小公倍数是:%d\n",fb(a,b));
}
int fy(int x,int y)
{
int k=1,i;
for(i=1;i<=(x{
if(x%i==0 && y%i==0) k=i;
}
return k;
}
int fb(int x,int y)
{
int i;
for(i=x;i<=(x*y);i++)
{
if(i%x==0 && i%y==0) break;
}
return i;
}

Q6:C语言题目——最小公倍数和最大公约数

#include void main()
{
int x,y,tempGY,tempGB,GY,GB;printf("输入两个正整数(用空格分开),求这两个正整数的最小公倍数和最大公约数:\n");
scanf("%d%d",&x,&y);
for(int i=1;i<=(x{
if(x%i==0 && y%i==0)
GY=i;
}
tempGB=x*y;
for(i=tempGB;i>=(x{
if(i%x==0 && i%y==0)
GB=i;
}
printf("最大公约数是%d,最小公倍数是%d\n",GY,GB);
getchar();
}

Q7:c语言编程最大公约数最小公倍数

因为n>m,假设最大公约数为X,先对n%m,获得其余数r,接下来只要证明X也是余数r的约数,因为n=a*X,m=b*X,n=m*c+r,代入则得a*X=b*c*X+r,所以r/X=a-b*c(a,b,c都为正整数),所以X是r的约数,后面代码里都写了,递归到r为0时,就是r=X时

猜你喜欢

更多