java - 寻找特定的正整数

标签 java

<分区>

我想求整数 n,使得 1/z + 1/x = 1/n 时有 1000 种组合。这是我的代码:

int counter = 0;
    double n = 1;

    while (true) {
        for (double i = 1; i < 10000; i++) {
            for (double t = 1; t < 10000; t++) {
                if ((1/i) + (1/t) == (1/n)) {                       
                    counter++;
                    System.out.println(counter);
                }
            }           
        }   
        if (counter < 1000) {
            counter = 0;
            n++;
        } else {
            System.out.println("Counterr: " + counter);
            System.out.println("Answer: " + n);
            System.exit(0);
        } 
    } 

如果我尝试找到 4 种组合,它会起作用,但当找到 1000 种组合时就不行。为什么?

最佳答案

这可能是因为浮点精度问题。您在循环中对 double 值使用增量 ++ 运算符,并通过 == 比较 double 值。这些操作的结果可能不如预期,尤其是在多次迭代之后。

尝试更改您的代码以使用具有精确精度的整数,而不是 double 。请注意你的等式

1/z + 1/x = 1/n

相当于

n * (x + z) = x * z

因此,按如下方式更改循环:

    for (int i = 1; i < 10000; i++) {
        for (int t = 1; t < 10000; t++) {
            if (n * (i + t) == i * t) {
                counter++;
                System.out.println(counter);
            }
        }           
    }

此外,现在更清楚如何优化迭代范围。考虑 it 的下限和上限 - 减少迭代范围将显着提高整体性能。

不幸的是,我目前没有测试结果,但我很确定你应该以整数而不是 double 进行计算。

关于java - 寻找特定的正整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945332/

相关文章:

java - 带空字段的 ArrayList

java - 无法下载主题和发件人地址(rediff)

java - 求部分填充数组的平均值

java - Java中简单的dom4j解析 - 无法访问子节点

java - Groovy 脚本以编程方式在 Jenkins 中设置 SonarQube 服务器设置

java - JavaFX中是否有 'Scene Changed Listener'

java - 计算曼哈顿距离

java - JAX-RS - 没有根节点的 JSON

Java 泛型 : Clean way to process two generic types using one function signature

java - bukkit - 等待?