我已经开始学习用 Java 编写代码,并决定使用Project Euler站点给我一些小任务,让我尝试完成所学的每一点新代码。所以我遇到了问题3:
13195 的质因数是 5、7、13 和 29。数字 600851475143 的最大质因数是多少?
我考虑了这个问题并研究了许多关于素数的不同理论,以及如何通过各种不同的计算找到它们(埃拉托色尼筛就是一个例子),我想出的解决方案是测试 2 --> n 中的数字,看看是否它们是质数,如果是,那么我会将 Tn 变量(在本例中为 600851475143)除以新发现的质数,看看它是否是一个因子。如果是,我会将其分配给变量 Hp(最高质数),并在程序结束时将 Hp 输出到控制台以给出我的结果。
这是我的代码:
public class Largest_Prime_Factor_NEW_SOLUTION {
static long Tn = 600851475143L;
static long Hp = 0;
static boolean isPrime = false;
public static void main(String[] args) {
for (long i=2; i<Tn; i++) {
System.out.println("TESTING NUMBER " + i);
for (long k=2; k < i; k++) {
if (i % k == 0) {
System.out.println(i + " IS NOT A PRIME");
break;
} else if (k + 1 == i) {
isPrime = true;
}
}
if (isPrime) {
System.out.println(i + " IS A PRIME");
if (Tn % i == 0) {
System.out.println(Tn + " IS DIVISIBLE BY " + i);
Hp = i;
} else {
System.out.println(Tn + " IS NOT DIVISIBLE BY " + i);
}
}
isPrime = false;
}
System.out.println("THE HIGHEST PRIME NUMBER OF " + Tn + " IS " + Hp);
}
}
现在我知道这段代码效率很低,刚开始我已经设法从我开始的地方压缩它(到处都是循环!)但我要问的是,我该如何改进呢?它正在吞噬我,因为我研究的所有内容都与其他人会做的事情相矛盾,而且非常令人困惑。我已经尝试过筛法,但我知道布尔数组只能是 int 数组,而不能是长数组?
我知道,当开始编写代码时,我将受限于我可以使用的知识,但出于兴趣,我很想看看最终的解决方案是什么。