当前位置: 首页 > news >正文

东方博宜OJ ——1335 - 土地分割

递归 入门 ————1335 - 土地分割

  • 1335 - 土地分割
    • 题目描述
    • 输入
    • 输出
    • 样例
    • 问题分析
    • 递归解法(欧几里得算法)
    • 代码实现
    • 总结

1335 - 土地分割

题目描述


把一块m * n米的土地分割成同样大的正方形,如果要求没有土地剩余,分割出的正方形土地最大边长是多少米?(最少不能少于1米*1米)如:一块6米 * 4米的土地,能够分割的最大的正方形的边长为2米。(5.2.45)
在这里插入图片描述


输入

两个整数m和n(m,n <= 10^ 18)


输出

能够分割的最大正方形的边长


样例

- 输出:
6 4
- 输出:
2

问题分析

这道题实际上是在求 m 和 n 的最大公约数(GCD),因为:

  • 正方形的边长 k 必须能整除 m 和 n(即 m % k == 0 且 n % k == 0)。
  • 最大的 k 就是 GCD(m, n)。

递归解法(欧几里得算法)

我们可以用 欧几里得算法(辗转相除法) 递归求解 GCD(m, n):

  1. 基本情况:如果 n == 0,则 GCD(m, 0) = m。

  2. 递归情况:GCD(m, n) = GCD(n, m % n)。

代码实现

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
// 1335 - 土地分割
long long gcd(long long m, long long n){
	// 欧几里得算法
	// 递归出口 被除数 == 0 说明除数已经是最小公倍数了  
	if ( n == 0) return m;
	// 辗转连除 求最小公倍数 
	return gcd(n, m % n);
}
int main() {
	long long  m, n;
	cin >> m >> n;
	cout << gcd(m, n) << endl;
    return 0;
}

总结

  • 递归解法:直接套用欧几里得算法求 GCD(m, n)。
  • 时间复杂度:O(log(min(m, n))),非常高效。
  • 适用场景:适用于任意 m 和 n,只要它们是非负整数。

相关文章:

  • IDEA的常用设置(更新中......)
  • 云原生(Cloud Native)的详解、开发流程及同类软件对比
  • [ComfyUI] 最新控制模型EasyControl,吉卜力风格一键转绘
  • 08【基础学习】串口通信(三):收发数据包+数据校验
  • 某公司网络OSPF单区域配置
  • 作业帮前端面试题及参考答案 (100道面试题-上)
  • 交易所开发全流程解析:KYC与U盾在安全合规中的战略价值
  • 基于Ubuntu系统搭建51单片机开发环境的详细教程
  • Auto-Encoder --李宏毅机器学习笔记
  • 视觉算法+雾炮联动:开创智能降尘新时代
  • 基于unsloth微调大模型并上传到huggingface
  • zephyr RTOS 中 bt_le_adv_start函数的功能应用
  • 基础知识:离线安装docker、docker compose
  • Docker 代理配置全攻略:从入门到企业级实践
  • iOS设备文件管理实践
  • 【数据分享】1981-2024年全国各城市逐日、逐月、逐年平均气温(Shp格式)
  • 高性能内存kv数据库Redis
  • 个人博客系统
  • 【转载翻译】Open3D和PCL的一些比较
  • 如何协调跨部门资源争夺
  • 马上评丨别让“免费领养”套路坑消费者又坑宠物
  • 历史新高!上海机场一季度营收增至31.72亿元,净利润增34%
  • 吕国范任河南省人民政府副省长
  • 新剧|反谍大剧《绝密较量》央一开播,张鲁一高圆圆主演
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 清华姚班,正走出一支军团