关于求两个正整数的最大公约数和最小公倍数的此C程序

时间:2021-11-04 00:35:31

关于求两个正整数的最大公约数和最小公倍数的此C程序

Ⅰ.辗转相除法

#include<stdio.h>
int main()
{
	int p,r,m,n,t;
	scanf("%d %d",&n,&m);
	if(n<m)
	{
		t=n;
		n=m;
		m=t;
	}
	p=n*m;
	while(m!=0)
	{
		r=n%m;
		n=m;
		m=r;
	}
	printf("最大公约数为:%d\n",n);
	printf("最小公倍数为:%d\n",p/n);
	return 0;
}

Ⅱ.暴力判断法(叫什么名字好呢)

#include<stdio.h>
int main()
{
	int a,b,m,n,i,j;
	scanf("%d %d",&a,&b);
	m=(a<b?a:b);
	for(i=m;i>=2;i--)
	{
		if(a%i==0&&b%i==0) {printf("a和b的最大公约数为:%d\n",i);break;} 
	}
	 if(i==1)printf("a和b没有最大公约数\n");
	n=(a>b?a:b);
	for(j=n;j<=a*b;j++)
	{
		if(j%a==0&&j%b==0) {printf("a和b的最小公倍数为:%d\n",j);break;}
		
	}printf("\n");
	return 0;
}

已被红色字体部分折磨死。。。绿色字体部分要注意应用。

Ⅲ.标识量判断(由Ⅱ衍生)

#include<stdio.h>
int main() {
	int a,b,m,n,i,j;
	int record=0;
	scanf("%d %d",&a,&b);
	m=(a<b?a:b);		
	for(i=m; i>=2; i--) {
		if(a%i==0 && b%i==0) {
			record = 1;
			break;
		}
	}
	
	n=(a>b?a:b);
	for(j=n; j<=a*b; j++) {
		if(j%a==0&&j%b==0) break;
	}
	
	if(record) printf("a和b的最大公约数是:%d\n", i);
		else printf("a和b没有最大公约数\n");
	
	printf("a和b的最小公倍数为: %d\n",j);
	
	printf("\n");
	return 0;
}
过程很艰难,但是get到了知识。