java - 检查数字是否丑陋

标签 java

我正在做这个问题:

Write a program to check whether a given number is an ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.

Note that 1 is typically treated as an ugly number.

这是我的尝试:

public class Solution {
    public boolean isUgly(int num) {
        if (num == 1) {
            return true;
        }
        for (int i = 7; i <= num / 2; i++) {
            if (isPrimeFactor(i, num)) {
                return false;
            }
        }
        return true;
    }

    public boolean isPrimeFactor(int candidate, int num) {
        return isPrime(candidate) && isFactor(candidate, num);
    }

    public boolean isPrime(int num) {
        if (num == 2) {
            return true;
        }
        if (num % 2 == 0) {
            return false;
        }
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    public boolean isFactor(int candidate, int num) {
        return (num % candidate == 0);
    }
}

不幸的是,它在测试输入 -2147483648 时失败。当它应该为 false 时它返回 true。

知道我做错了什么吗?

最佳答案

您只是忘记了以下强调的条件:

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5.

因此,您只需要在 isUgly 方法中添加一个负数检查:

if (num <= 0) {
    return false;
}

作为旁注,您也许可以通过交换 isPrimeFactor 中的条件并测试 isFactor(candidate, num) && isPrime(candidate) 来稍微提高性能而不是 isPrime(candidate) && isFactor(candidate, num)。这是因为确定一个数是否是另一个数的因数比确定一个数是否为质数更快。

关于java - 检查数字是否丑陋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321488/

相关文章:

Java 扫描器在处理中不起作用

Java Map 按值排序

java - 如何为需要验证第三方生成的 JWT token 且用户没有密码的 rest api 配置 spring http 安全性?

java - Kotlin/Java 在 map 中收集 map 的功能和不可变方式

java - 从网页解析 JSON 文件并将值存储在二维数组中

java - 正确设置mysql排序规则

java - IntelliJ IDEA 15 无法识别 java.time

java - 生成 axis2 webservice 客户端 jar

Java,将分钟添加到日期,奇怪的异常

Java序列化: Can not produce run time exception as specified in java docs 1. 8