我已经开始学习用Java编写代码,并决定使用Project Euler站点给我做一些小任务,以尝试并完成所学到的每一个新编码.所以我遇到了Problem 3:
13195的主要因子是5、7、13和29.
什么是600851475143的最大素数?
我考虑了这个问题,研究了许多关于质数的理论,以及如何通过各种不同的计算找到质数的方法(以Eratosthenes筛为例),我想到的解决方案是测试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
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);
}
}
现在我知道该代码效率很低,从一开始我就设法从我开始的地方将其压缩(到处都是循环!),但是我要问的是,我该如何改进呢?它正在吞噬我,因为我研究的所有内容都与他人的行为相矛盾,这非常令人困惑.我尝试了sieve方法,但我知道布尔数组只能是int数组,而不能是long数组?
我了解,在开始编码时,我将限于可以使用的知识,但是出于兴趣,我渴望看到最终的解决方案.