我试着将Ruby代码转换为Java代码:
text
代码在下面。正如您所看到的,因为java中没有质数(Ruby中的require prime
行使所有数字都是质数),所以我的程序只是返回所有数字。我不知道如何在Java中实现。感谢帮助。
import java.util.HashSet;
import java.util.Set;
public class sus {
public static void main(String[] args) {
long maxNum = 9876543210L;
int minNum = 1023456789;
int maxPrimeToCube = 2143;
int count = 0;
for (int primeToCube = 2; primeToCube <= maxPrimeToCube; primeToCube++) {
int cubedVal = primeToCube * primeToCube * primeToCube;
for (int primeToSquare = 2; primeToSquare <= maxPrimeToCube; primeToSquare++) {
int squaredVal = primeToSquare * primeToSquare;
int combinedVal = squaredVal + cubedVal;
if (combinedVal < minNum) {
continue;
}
if (combinedVal > maxNum) {
break;
}
String s = String.valueOf(combinedVal);
Set<Character> uniqueDigits = new HashSet<>();
for (char digit : s.toCharArray()) {
uniqueDigits.add(digit);
}
if (uniqueDigits.size() == 10) {
count++;
System.out.println("val: " + s + " = " + primeToSquare + "^2 + " + primeToCube + "^3, count: " + count);
}
}
}
System.out.println(count);
}
}
字符串
_________________________________________________________-
1条答案
按热度按时间kjthegm61#
我相信你的代码中的错误是你没有使用质数。
您只是使用了一个值范围,从 2 到 2143。
您可以使用 Java 类来模拟 Prime 类。
这将用素数填充 List,给定对象示例化期间提供的 maximum 值。
字符串
下面是一个示例用法。
型
此外,您可以使用以下代码模拟 String 到 Set 的转换:
型
这里是一个完整的重构,来自 Ruby 代码。
对于 prime_to_square 循环,我不得不使用 maximum 为 * 100,000 * 的 Prime 列表来获得所需的结果。
型
产出
型