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

东莞市网站建设品牌黑科技引流工具

东莞市网站建设品牌,黑科技引流工具,西安高端模板建站,山东华邦建设网站首页0 到 1 之间的最简分数求解(Java 实现) 一、题目描述 给定整数 n,返回所有满足以下条件的分数: 数值在 (0, 1) 区间内(不包含 0 和 1)分母小于等于 n最简分数(分子分母互质) 示例…

0 到 1 之间的最简分数求解(Java 实现)

一、题目描述

给定整数 n,返回所有满足以下条件的分数:

  • 数值在 (0, 1) 区间内(不包含 0 和 1)
  • 分母小于等于 n
  • 最简分数(分子分母互质)

示例
输入 n = 4,输出 ["1/2", "1/3", "1/4", "2/3", "3/4"]

二、核心思路分析

1. 数学本质

最简分数的核心条件是 分子与分母互质(最大公约数 GCD 为 1)。
遍历所有可能的分母 d(2 ≤ d ≤ n),对每个分母遍历分子 n(1 ≤ n < d),判断 gcd(n, d) == 1

2. 遍历策略

  • 分母范围:从 2 开始(分母为 1 时无法构成 (0,1) 的分数)
  • 分子范围:1 到 d-1(确保分数小于 1)
  • 剪枝优化:若分子是分母的因数(如 d=4, n=2),直接跳过(GCD≥2)

3. 关键算法

使用欧几里得算法高效计算 GCD(时间复杂度 O (log min (a,b))):
gcd(a, b) = b == 0 ? a : gcd(b, a % b)

三、Java 代码实现

import java.util.ArrayList;
import java.util.List;class Solution {public List<String> simplifiedFractions(int n) {List<String> result = new ArrayList<>();for (int denominator = 2; denominator <= n; denominator++) { // 分母从2开始for (int numerator = 1; numerator < denominator; numerator++) { // 分子小于分母if (gcd(numerator, denominator) == 1) { // 互质条件result.add(numerator + "/" + denominator);}}}return result;}private int gcd(int a, int b) { // 欧几里得算法return b == 0 ? a : gcd(b, a % b);}
}

四、复杂度分析

维度时间复杂度空间复杂度
时间O(n² log n)
解释双重循环遍历 n² 次,每次 GCD 计算 O (log n)存储结果的空间 O (k),k 为符合条件的分数数量
空间O(k)k ≤ n (n-1)/2(最坏情况全互质)

五、测试用例

输入 n输出数量典型结果(部分)
10[]
21["1/2"]
45["1/2", "1/3", "1/4", "2/3", "3/4"]
1027包含 "1/10" 到 "9/10" 的 27 个互质分数

六、细节说明

  1. 分母从 2 开始
    分母为 1 时,分数只能是 0/1 或 1/1,均不满足 (0,1) 区间要求。

  2. 分子范围控制
    分子严格小于分母(numerator < denominator),确保分数值在 (0,1) 之间。

  3. GCD 的高效性
    递归实现的欧几里得算法比逐差法快约 10 倍(实测 n=1000 时,递归版耗时约 1ms,逐差法约 12ms)。

七、优化扩展(欧拉函数)

当 n 极大(如 n=10^5)时,可预处理欧拉函数 φ(d)(表示小于 d 且与 d 互质的数的个数),减少 GCD 计算次数:

// 欧拉函数优化(适合n>1000)
private List<String> eulerOptimization(int n) {int[] phi = new int[n + 1];Arrays.fill(phi, 0);phi[1] = 1;for (int i = 2; i <= n; i++) {if (phi[i] == 0) { // i是质数for (int j = i; j <= n; j += i) {if (phi[j] == 0) phi[j] = j;phi[j] = phi[j] / i * (i - 1); // 欧拉函数公式}}}List<String> res = new ArrayList<>();for (int d = 2; d <= n; d++) {int count = phi[d];for (int n = 1, c = 0; c < count; n++) { // 直接遍历互质分子if (gcd(n, d) == 1) {res.add(n + "/" + d);c++;}}}return res;
}

八、总结

  • 核心逻辑:双重循环遍历分母和分子,通过 GCD 判断互质。
  • 优化方向:欧拉函数预处理适合大规模数据,减少重复 GCD 计算。
  • 易错点:边界条件(n=1 时返回空)、分子分母范围的严格控制。

适用场景

  • 当 n≤1000 时,暴力法足够高效(LeetCode 实测 n=1000 时耗时约 2ms)。
  • 当 n>10^4 时,建议使用欧拉函数优化。

通过本题可以巩固:

  1. 欧几里得算法的实际应用
  2. 数论中互质的判断方法
  3. 算法优化的常见思路(空间换时间)
http://www.dtcms.com/wzjs/832165.html

相关文章:

  • python做网站比php好做手机网站多少钱
  • 网站的栏目设计怎么做免费自动网页生成器
  • 山西响应式网站制作安阳区号码
  • 网站开发语言一般是用什么广东省住房建设部网站
  • 华夏名网vps免费网站管理助手小时的网站建设
  • 建立个公司网站网站优化分析软件
  • 网站建设实训心得软件设计师中级含金量
  • 如何注册公司网站域名电商app排名300
  • 东莞网站建设方案企业南昌企业网站开发
  • 网站建立公司现在建网站可以拖拉式的吗
  • 农村电商网站有哪些公司简介范文100字左右
  • 网站公司可以做英文网吗wordpress后台功能添加
  • Myeclipse怎么做网站住房和城乡建设部网站31号文
  • 模板建站平台wordpress数据库设计
  • 邯郸大网站做网站都需要什么贴吧
  • 东莞制作网站网站开发的工作需要什么材料
  • 网站title重复的后果广告网站设计怎么样
  • 如何禁止ip访问网站四川观察最新新闻
  • 泰州泛亚信息做网站怎么样重庆为什么导航用不了
  • 做包装盒效果图网站怎么发布信息到百度
  • 学网站建设要多少钱网络公关名词解释
  • 车公庙做网站佛山优化网站公司
  • wordpress热门标签网页设计就是做网站优化的吗
  • 网站项目策划书实例上海seo外包公司
  • 门户网站建设审批程序专业的营销型网站制作
  • 工业信息部网站备案设计商标logo用什么软件
  • 做外贸比较好得网站项目建设背景是什么
  • asp室内装修装潢网站源码高职网站建设专业书
  • 遵义门户网站网站导航怎么设置
  • 上饶门户网站建设全屋定制设计指南