C++求最大公约数和最小公倍数

方法一:辗转相除法

     用 "较大数" 除以 "较小数",再用 "较小数" 除以 "第一余数",再用“第一余数”除以  “第二余数",

     如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
	int a,b;
	//while(scanf("%d,%d",&a,&b)!=EOF)//这样写有问题,a*b 所得值不对,好像是地址值
	while((cin>>a>>b)!=NULL)
	{
		if(a<b)//大数放在前面
		{
			int temp=a;
			a=b;
			b=temp;
		}
		int gcd=0; //Greatest Common Divisor 最大公约数;  
		int lcm=a*b; // Lowest Common Multiple 最小公倍数; 
		
		int t=0;
		while(b!=0)
		{
			t=a%b;
			a=b;
			b=t;
		}
		gcd=a;
		lcm=lcm/gcd;
		//cout<<gcd<<" "<<lcm<<endl;
		printf("%d %d\n",gcd,lcm);
	}
	return 0;
}

方法二:更相减损法

       "较大数" 减 "较小数",循环,当两数相同时,相同的数即为“最大公约数”#include <stdio.h>

 
 
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){int a,b;while((cin>>a>>b)!=NULL){int gcd=0; //Greatest Common Divisor 最大公约数; int lcm=a*b; // Lowest Common Multiple 最小公倍数; while(a!=b){if(a>b){a-=b;}else{b-=a;}}gcd=a;lcm=lcm/gcd;printf("%d %d\n",gcd,lcm);}return 0;}




猜你喜欢

转载自blog.csdn.net/zhuiqiuzhuoyue583/article/details/80140459