day11.3
谁能横刀立马,唯我飞牛大将军!
1.求两个数的最大公约数
方法一:穷举法
//打印100-200之间的素数
#include<stdio.h>
#include<windows.h>
#include<math.h>
#pragma warning(disable:4996)
int GreatCommonDivisor(int _x, int _y)
{
int top = _x > _y ? _y : _x;
int i = top;
for (; i >= 2; i--)
{
if ((_x % i == 0) && (_y % i == 0))
{
return i;
}
}
return 1;
}
int main()
{
printf("请输入两个数:");
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
int ret = GreatCommonDivisor(x, y);
printf("%d\n",ret);
system("pause");
return 0;
}
方法二:辗转相减法
x由n个T组成,即x = T+…+T
y由m个T组成,即y = T +…+T
让x,y辗转相减,最终的x y值相等,便是最大公约数
//打印100-200之间的素数
#include<stdio.h>
#include<windows.h>
#include<math.h>
#pragma warning(disable:4996)
int GreatCommonDivisor(int _x, int _y)
{
while (1)
{
if (_x > _y)
{
_x = _x - _y;
}
else if(_x < _y)
{
_y = _y - _x;
}
else
{
break;
}
}
return _x;
}
int main()
{
printf("请输入两个数:");
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
int ret = GreatCommonDivisor(x, y);
printf("%d\n",ret);
system("pause");
return 0;
}
方法三:辗转相除法
x y : T = nx +(-+my)
x % y = a…b —> x = ay + b —> b = x-ay
经过演算,这里 x = x % y , y = y % x
当x % y 或者 y % x 其中一个模为0,则此时 x = y = 最大公约数
//打印100-200之间的素数
#include<stdio.h>
#include<windows.h>
#include<math.h>
#pragma warning(disable:4996)
int GreatCommonDivisor(int _x, int _y)
{
while (_x * _y != 0)
{
if (_x > _y)
{
_x %= _y;
}
else if(_x < _y)
{
_y %= _x;
}
else
{
break;
}
}
return _x == 0 ? _y:_x;
}
int main()
{
printf("请输入两个数:");
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
int ret = GreatCommonDivisor(x, y);
printf("%d\n",ret);
system("pause");
return 0;
}