最大公约数和最小公倍数

来源:互联网 发布:买衣服 知乎 编辑:程序博客网 时间:2024/06/08 06:58

最大公约数和最小公倍数

一、求整数的最大公约数
方法:辗转相除法,即将一个数除以另一个数,若余数为0,则除数为最大公约数,若不为0,则将除数赋给被除数,余数赋给除数,反复进行上述操作。
int getMaxDivisor(int x,int y){int t;while(x%y!=0){t=x%y;x=y;y=t;}return y;} 
二、求整数的最小公倍数
方法:两个数的乘积除以它们的最大公约数即最小公倍数
int mul;mul=x*y/getMaxDivisor(x,y);
三、求分数的最小公倍数
方法:两个数的分子的最小公倍数与两个数的分母的最大公约数的比值(还要进行化简)
例子:卫星相遇周期问题,输入两颗卫星转动的圈数和天数,输出它们的相遇周期
#include<stdio.h>long long getMaxDivisor(long long x,long long y){long long t;while(x%y!=0){t=x%y;x=y;y=t;}return y;} int main(){int n;long long cir1,cir2,day1,day2,div1,div2,res1,res2,res;scanf("%d",&n);while(n--){scanf("%lld/%lld %lld/%lld",&cir1,&day1,&cir2,&day2);div1=getMaxDivisor(cir1,day1);div2=getMaxDivisor(cir2,day2);cir1=cir1/div1;day1=day1/div1;cir2=cir2/div2;day2=day2/div2;res1=cir1*cir2/getMaxDivisor(cir1,cir2);res2=getMaxDivisor(day1,day2);res=getMaxDivisor(res1,res2);res1=res1/res;res2=res2/res;if(res2==1){printf("%lld\n",res1);}else{printf("%lld/%lld\n",res1,res2);}}return 0;}
四、求多个整数的最小公倍数
方法:先求得两个数的最小公倍数,再求该数与其他一个数的最小公倍数,重复进行



0 0
原创粉丝点击