[原创]C语言中最大公约数求法
程序代码:
从键盘输入两个整数,输出器最大公约数及最小公约数。 法一:穷举法 #include<stdio.h> main() { int m,n,i; scanf("%d%d",&m,&n); for(i=m;;i--) if(m%i==0&&n%i==0) break; printf("%d,%d\n",i,m*n/i); } --------------------------------------- #include<stdio.h> main() { int m,n,t,i; scanf("%d%d",&m,&n); for(i=1;i<=(m<n?m:n);i++) if(!(m%i)&&!(n%i)) t=i; printf("%d,%d\n",t,m*n/t); } 法二:辗转相除法 #include<stdio.h> main() { int m,n,t,r; scanf("%d%d",&m,&n); r=m*n; t=m%n; while(t) {m=n;n=t;t=m%n;} printf("%d,%d\n",n,r/n); } 分析: 40%32=8; 32%8=0; 故最大公约数为8 最小公倍数40*32/8=160 法四:相减法 #include<stdio.h> main() { int m,n,r; scanf("%d%d",&m,&n); r=m*n; while(m!=n) if(m>n) m=m-n; else n=n-m; printf("%d,%d\n",m,r/m); } 分析: 40-32=8; 32-8=24; 24-8=16; 16-8=8; 8=8=0; 由于本人条件有限,借别人电脑,故只作简单分析,如有不懂,请自行查阅资料。 如有错误,请指出。