给定两个数字,求他们的最大公约数,你会怎么求呢?
假定 数字a b。
穷尽法
穷尽法:,从数字2开始到a,b本身(为什么不是1呢?),每个都取余数,当同时满足ab的余数为0时,这个数字就是他俩的余数,从小到大开始求,最后一个直到ab中交较小的哪一个。最后一个自然就是最大的啦!
源代码如下:
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
//求两个数的最大公约数
int Commonmeasure(int a, int b)//求两个数的最大公约数
{
int x = 0, y = 0;
int result = 0, i = 0;
for (i = 2; i <=a && i <= b; i++){
x = a%i, y = b%i;
{
if (x == 0 && y == 0)
{
result = i;
}
else
{
continue;
}
}
}
return result;
}
int main()
{
//求最大公约数的最笨办法!
int a = 0, b = 0;
printf("请输入要求公约数的两个整数a= b=\n");
scanf("%d%d", &a,&b);
int result = Commonmeasure(a, b);
{
if (result){
printf("a and b的最大公约数为%d\n", Commonmeasure(a, b));
}
else
{
printf("a and b没有公约数\n");
}
}
system("pause")
}
辗转相除法:
辗转相除法:即用ab中的较大数除以较小数字,除不尽就用小的数b再除得到的余数c,如此循环,直到最后余数为0时,最后这个被除数“b”几位最大公约数。(表述不清,多有见谅,看完代码,定能理解)
源代码
int main()
{
int a = 18;
int b = 24;
int c = 0;
while(c=a%b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}