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

 我来答
问明6E
高粉答主

2019-05-24 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.4万
展开全部

解题步骤:

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;

}

参考资料:

百度百科——穷举法

My_Persistence
推荐于2017-12-16 · TA获得超过3465个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:416万
展开全部
//求两个数的最大公约数和最小公倍数
void fun(int a,int b)
{
    int temp,r;
    int v;
     
    if(a<b)
    {temp=a; a=b; b=temp;}    //将大数放在a中,小数放在b
    v=a*b;
    r=a%b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    v/=b;
    printf("最大公约数为%d\n",b);
    printf("最小公倍数为%d\n",v);
}

这是求最小公倍数和最大公约数的函数,希望对你有所帮助。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伟大还惬意丶银杏I
高粉答主

2020-05-14 · 每个回答都超有意思的
知道答主
回答量:6.8万
采纳率:0%
帮助的人:3202万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4747哦
2019-07-08 · TA获得超过675个赞
知道小有建树答主
回答量:365
采纳率:73%
帮助的人:70.8万
展开全部
最小公倍数
#include<stdio.h>
main()
{
int a,b,i,t,k;
printf("输入两个数a>1,b>1\n");
scanf("%d %d",&a,&b);
if(a>b)
{
t=a;a=b;b=t;
}
for(i=1;i<=a;i++)
if((b*i)%a==0)
{
k=b*i;break;
}
printf("%d",k);
}
最大公约数
#include<stdio.h>
main()
{
int a,b,i,t,k;
printf("输入两个数a>1,b>1\n");
scanf("%d %d",&a,&b);
if(a>b)
{
t=a;a=b;b=t;
}
for(i=1;i<=a;i++)
if(a%i==0&&b%i==0)
k=i;
printf("%d",k);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南村有雪
2018-07-24 · 科技连接世界,科技连接生活
南村有雪
采纳数:197 获赞数:2458

向TA提问 私信TA
展开全部
#include "stdafx.h"
#include<stdio.h>
#include<math.h>
int gongyueshu(int a, int b);
int gongbeishu(int a, int b);
int main()
{
int a, b,m,n;
scanf("%d%d", &a, &b);
m = gongyueshu(a,b);
n = gongbeishu(a, b);
printf("最大公约数:%d\n", m);
printf("最小公倍数:%d", n);
return 0;
}

int gongyueshu(int a, int b)
{
int i,x;
for (i = 1; i <= a&&i<=b; i++) {
if (a%i == 0 && b%i == 0) {
x = i;
}
}
return x;
}

int gongbeishu(int a, int b)
{
int i, x;
i = (a > b) ? a : b;
for (i = i; i <= a * b; i++) {
if (i%a == 0 && i%b == 0) {
x = i;
break;
}
}
return x;
}

调用函数的做法如图所示。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式