Java 如何检查数字是否可以用a^B的形式表示?

Java 如何检查数字是否可以用a^B的形式表示?,java,Java,最近在一次采访中,我被要求写一个程序来检查一个数字是否可以用a^B的形式表示。我无法解决这个问题,因为我甚至没有正确的方法来解决这个问题 这里有几个例子 Input = 4 Output = true 因为它可以表示为2^2 Input = 536870912 Output = true 因为它可以表示为2^29 Input = 1024000000 Output = true 因为它可以表示为2^16*5^6=32000^2 任何人都可以提供一个解决方案(最好使用Java)来解决这个

最近在一次采访中,我被要求写一个程序来检查一个数字是否可以用a^B的形式表示。我无法解决这个问题,因为我甚至没有正确的方法来解决这个问题

这里有几个例子

Input = 4
Output = true
因为它可以表示为2^2

 Input = 536870912
 Output = true
因为它可以表示为2^29

Input = 1024000000
Output = true
因为它可以表示为2^16*5^6=32000^2


任何人都可以提供一个解决方案(最好使用Java)来解决这个问题吗?

如果你想知道一个已知的X的X=AB的答案,同时使用≥ 2和B≥ 2,两者都是整数,那么最短的搜索是A=B√X表示B=2..n,直到A<2

public static void findPower(double value) {
    if (value < 1 || value % 1 != 0)
        throw new IllegalArgumentException("Invalid input: " + value);
    boolean found = false;
    for (int exp = 2; ; exp++) {
        long base = Math.round(Math.pow(value, 1.0 / exp));
        if (base < 2)
            break;
        if (Math.pow(base, exp) == value) {
            System.out.printf("%.0f = %d ^ %d%n", value, base, exp);
            found = true;
        }
    }
    if (! found)
        System.out.printf("%.0f has no solution%n", value);
}
输出

findPower(4);
findPower(123_456);
findPower(536_870_912);
findPower(1_024_000_000);
findPower(2_176_782_336d);
findPower(205_891_132_094_649d);
4=2^2
123456没有解决方案
536870912 = 2 ^ 29
1024000000 = 32000 ^ 2
2176782336 = 46656 ^ 2
2176782336 = 1296 ^ 3
2176782336 = 216 ^ 4
2176782336 = 36 ^ 6
2176782336 = 6 ^ 12
205891132094649 = 14348907 ^ 2
205891132094649 = 59049 ^ 3
205891132094649 = 729 ^ 5
205891132094649 = 243 ^ 6
205891132094649 = 27 ^ 10
205891132094649 = 9 ^ 15
205891132094649 = 3 ^ 30

Hint-主要因素。每个整数都可以用其素数因子的乘积表示,求出一个数的素数因子称为。你可以先求出该数的平方根,然后开始将该数除以所有低于其平方根的素数,如果你找到一个数,你就停下来,否则您将继续,直到达到1。如果对
B
没有限制,则只需对所有内容说
true
<对于所有
A
,code>A=A^1。