Java 如何检查数字是否可以用a^B的形式表示?
最近在一次采访中,我被要求写一个程序来检查一个数字是否可以用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)来解决这个
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。