试求解两个给定正整数m,n的最大公约数(m,n)。
设计思路
若m>n,则最大公约数最大可能是n,最小可能为1,于是设置c循环枚举从n开始递减至1的所有整数,在循环中逐个检测整数c,是否满足田间m%c=0且n%c=0。若满足该条件,说明c同时是m、n的约数,即c是m、n的公约数。
由于循环变量c从n开始递减至1,最先出现的公约数显然为最大公约数,则输出最大公约数gcd(m,n),退出循环结束。
流程图
代码:
#include<time.h>
#include<stdio.h>
int main() {
double op,ed;
double time;
op=clock();
long m,n,c;
printf("请输入正整数m、n:");
scanf("%ld %ld",&m,&n);
if(m<n) {
c=m;
m=n;
n=c;
}
for(c=n; c>=1; c--)
if(m%c==0&&n%c==0) break;
printf("(%ld,%ld)=%ld\n",m,n,c);
ed=clock();
time=ed-op;
printf("time=%lfms\n",time);
return 0;
}
结果: