关于求两个正整数的最大公约数和最小公倍数的此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到了知识。