我正在尝试解决Euler项目中的问题3:
13195的质因数是5、7、13、29。
600851475143的最大质因数是什么?
这是我的代码:
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
long max = 600851475143L;
ArrayList<Long> primes = new ArrayList<>();
primes.add((long) 2);
boolean prime = true;
for (long i = 3; i <= max; i += 2){
for (long j = 3; j < Math.sqrt(i); j++){
if (i % j == 0){
prime = false;
break;
}
}
if (prime) primes.add(i);
else prime = true;
}
for (int i = primes.size() - 1; i >= 0; i--){
if (max % primes.get(i) == 0){
System.out.println(primes.get(i));
return;
}
}
}
}
代码没有输出任何东西,它只是给了我一个空白屏幕。请不要帮我解决这个问题,告诉我是什么bug阻止了它输出任何东西。
您确定您的程序正在完成吗?我在下面添加了以下代码,第一个for循环似乎需要很长时间才能完成,这可能就是您没有看到任何输出的原因。要查看您的进度,请尝试添加如下打印语句:
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
long max = 600851475143L;
ArrayList<Long> primes = new ArrayList<Long>();
primes.add((long) 2);
boolean prime = true;
for (long i = 3; i <= max; i += 2){
if(i % 1000005 == 0)
System.out.println("i = " + i);
for (long j = 3; j < Math.sqrt(i); j++){
if (i % j == 0){
prime = false;
break;
}
}
if (prime) primes.add(i);
else prime = true;
}
for (int i = primes.size() - 1; i >= 0; i--){
if (max % primes.get(i) == 0){
System.out.println(primes.get(i));
return;
}
}
}
}
当你没有太多素数时,你在浪费时间计算所有的素数。
max
减少到该素数,直到它不再可整除。假设您正确地找到了素数(我相信您是这样的),请考虑以下几点:
primes = 2,3,5,7,11,13
max = 99
is 99 divisible by 2 - no, try next prime.
is 99 divisible y 3 - yes
max = 33
is 33 divisble by 3 - yes
max = 11
is 11 divisible by 3 - no
by 5 - no
by 7 - no
by 11 - hey, max is a prime! And it must be the largest because
it can't be reduced anymore.
如果需要,在查找max的每个素数因子时,请将其保存在列表中。
然后将列表中的所有值相乘,查看乘积==max。
这是你的密码
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
long max = 600851475143L;
// right here, reduce max by current prime (which starts at 2)
for (long i = 3; i <= max; i += 2){
boolean prime = true;
for (long j = 3; j < Math.sqrt(i); j++){
if (i % j == 0){
prime = false;
break;
}
}
if (prime) {
// right here, reduce max by current prime
}
}
}
}
问题: 13195的质因数是5、7、13、29。 数字600851475143中最大的素因子是什么? 我发现这个很简单,但运行这个文件花了很长时间,已经运行了一段时间,我得到的最高数字是716151937。 这是我的代码,我只是要等待还是我的代码中有错误? }
问题内容: 该代码应该返回最大的质数。有关此任务的更多信息:https : //projecteuler.net/problem=3 我决定将checkFactors()的参数加倍,因为我试图测试为什么我的代码无法正常工作。 工作并返回“ 29”。 但是, 不起作用, “ int类型的600851475143超出范围”。 确实可以编译,但是在几秒钟后给了我ArithmeticException。
问题内容: 欧拉计画的问题3是: 13195的主要因子是5、7、13和29。 600851475143的最大素数是多少? 我的解决方案需要永远。我认为我得到了正确的实施;但是,在进行大量测试时,我无法看到结果。它永远运行。我想知道我的算法是否有问题: 问题答案: 尽管不是Java语言,但我认为您可以做到以下几点。基本上,只需要测试奇数除数就可以减少迭代次数,并且最多可以减少数字的平方根。这是一种蛮
问题内容: 我刚开始解决Project Eulers问题。即使这很简单。我想就最佳解决方案征询您的意见。 问题: 如果我们列出所有低于10的自然数,它们是3或5的倍数,则得到3、5、6和9。这些倍数的总和为23。 找出1000以下3或5的所有倍数的总和。 这是我的编码方式: 问题答案: 看起来不错,尽管我会输入main。这么简单的程序没什么大不了的。但通常,应在尽可能狭窄的范围内声明变量。
问题内容: 13195的素数是5、7、13和29。600851475143的最大素数是多少? 好的,所以我正在研究python中的项目Euler问题3。我有点困惑。我无法确定我通过该程序获得的答案是否正确。如果有人能告诉我即时消息做错了,那太好了! 问题答案: 这个数字很大,不鼓励您使用蛮力。 将在打算把功能号码,这是 一个很大 的内存。 检查数字是否可以除以奇数并不意味着该奇数是质数。您提供的算
我的代码: 输出: