求最大公约数——辗转相除法

求最大公约数——辗转相除法

设求a和b的最大公约数c
则可看做边长分别为a和b的矩形,可恰好被边长为c的正方形无缝隙填满

方法:不断地用长边除以短边取余数,直到长边与短边相等,即为所求正方形

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

solve(a,b)=solve(b,a%b)=…… ……=solve(c,0)

代码:

int solve(int a, int b) {
	if (b == 0) return a;
	else return solve(b, a%b);
}

例题:

求线段上格点的个数

给定平面上的两个格点P1=(x1,y1)P2=(x2,y2),线段P1P2上,除P1和P2以外一共有几个点。
示例:
P1=(3,9) P2=(7,1)
则求出7-3和9-1的最小公倍数为solve(8,4)
小矩形的边长为分别为8/solve(8,4)和4/solve(8,4)
在这里插入图片描述

#include"stdio.h"
#include"stdlib.h"

int x1, y1;
int x2, y2;

int max(int a, int b) {
	return a > b ? a : b;
}
int min(int a,int b) {
	return a > b ? b : a;
}
int solve(int a, int b) {
	if (b == 0) return a;
	else return solve(b, a%b);
}
int main() {
	int dx, dy;
	scanf_s("%d%d", &x1, &y1);
	scanf_s("%d%d", &x2, &y2);
	dx = max(x1, x2) - min(y1, y2);
	dy = max(y1, y2) - min(y1, y2);
	printf("%d", solve(dx, dy)-1);
	system("pause");
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值