永发信息网

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

答案:4  悬赏:0  手机版
解决时间 2021-01-02 04:20
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)
{Hen=0;
whlie(Hen<=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;
}
参考资料:

百度百科——穷举法
全部回答
#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; }调用函数的做法如图所示。
最小公倍数 #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); }
//求两个数的最大公约数和最小公倍数 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); }这是求最小公倍数和最大公约数的函数,希望对你有所帮助。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
防蓝光眼镜哪个牌子好
单选题组成生物体的细胞既具有多样性,又具有
想问一下刚买的空调开机后不制冷还显示FF,是
(付个人借款)是什么意思?是我借给他人钱还
碧桂园属什么档次楼盘
单选题“广州十三行”是一个规范化管理的对外
我是一个初一女生,很想努力学习,成为个学霸
日照离菏泽多远
如何叠被子好看
广州医院挂号要多少钱
房屋的残值率是多少
后裔的意思是什么
若想同时除去水中的碳酸盐硬度和非碳酸盐硬度
假设 地球是均匀的圆球,而且在中间凿了个隧道
嵊泗枸杞岛怎么去
推荐资讯
北京的高铁经过江苏哪几个地方
绳可以换什么部首
关于如何制作泡野山椒水
携字五笔怎么打
求手表上的日文是什么意思 10分
守望先锋万圣节皮肤活动结束后能解锁吗
三亚至南宁火车路线
音响有噪音怎么清除
隔膜的拼音及意思
和男友舌吻了,我摸了他的后背,亲了他的喉结
毛衣起球是质量问题吗
手机版的爱奇艺里面的那个二维码在哪里找啊,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?