问题:
13195的质因数是5、7、13、29。
数字600851475143中最大的素因子是什么?
我发现这个很简单,但运行这个文件花了很长时间,已经运行了一段时间,我得到的最高数字是716151937。
这是我的代码,我只是要等待还是我的代码中有错误?
//User made class
public class Three
{
public static boolean checkPrime(long p)
{
long i;
boolean prime = false;
for(i = 2;i<p/2;i++)
{
if(p%i==0)
{
prime = true;
break;
}
}
return prime;
}
}
//Note: This is a separate file
public class ThreeMain
{
public static void main(String[] args)
{
long comp = 600851475143L;
boolean prime;
long i;
for(i=2;i<comp/2;i++)
{
if(comp%i==0)
{
prime = Three.checkPrime(i);
if(prime==true)
{
System.out.println(i);
}
}
}
}
}
一旦你找到了你的数字的一个因子,你就可以把它除掉,使剩下的数字变小。
if (prime)
{
System.out.println(i);
// The factor may occur multiple times, so we need a loop.
do {
comp /= i;
} while (comp % i == 0);
}
这样做还保证了每当i
划分comp
时,i
必须是素数,因为所有较小的素数都已被划分出来,因此您可以删除素数检查:
for (i = 2; i < comp/2; i++)
{
if (comp % i == 0)
{
System.out.println(i);
do {
comp /= i;
} while (comp % i == 0);
}
}
最后,您只需要检查i,直到comp的平方根,因为任何大于平方根的因子都必须伴随一个小于平方根的因子。(即,如果i*j==comp
,则i
或j
中的一个必须是
还有一些技巧可以应用,但对于这个问题来说,这应该足够了。
您可以简单地循环到sqrt(2)
而不是n/2
,这将节省大量时间。
你正朝着正确的方向前进,但是你已经远远超过了你需要去的地方,并且在这个过程中犯了一些错误。你现在检查的比你需要验证的质数高得多(尤其是质数
检查素数的函数实际上为复合函数返回true,而不是素数。您的代码:
if ((p%i==0) {
prime = true;
break; }
应该是
if ((p%i==0) {
prime = false;
break; }
在main方法中,实际上根本不需要布尔素数。从问题的上下文来看,我们可以假设将有两个以上的素数因子,这意味着我们需要将comp减少到一个更小且更易于管理的数字的最大素数因子是comp的立方根。因此,您的行(i=2;i
此外,您还可以:
prime = Three.checkPrime(i);
if(prime==true)
可减少至:
if (Three.checkPrime(i));
因为Three.checkPrime()将返回并最终被评估为布尔值。
问题内容: 欧拉计画的问题3是: 13195的主要因子是5、7、13和29。 600851475143的最大素数是多少? 我的解决方案需要永远。我认为我得到了正确的实施;但是,在进行大量测试时,我无法看到结果。它永远运行。我想知道我的算法是否有问题: 问题答案: 尽管不是Java语言,但我认为您可以做到以下几点。基本上,只需要测试奇数除数就可以减少迭代次数,并且最多可以减少数字的平方根。这是一种蛮
问题内容: 13195的素数是5、7、13和29。600851475143的最大素数是多少? 好的,所以我正在研究python中的项目Euler问题3。我有点困惑。我无法确定我通过该程序获得的答案是否正确。如果有人能告诉我即时消息做错了,那太好了! 问题答案: 这个数字很大,不鼓励您使用蛮力。 将在打算把功能号码,这是 一个很大 的内存。 检查数字是否可以除以奇数并不意味着该奇数是质数。您提供的算
我的代码: 输出:
我试图解决欧拉三号工程,但我对停止计算的逻辑相当混乱。 以下是第三个Euler项目: 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么? 我创建了一个函数来检查数字是否为素数: 以及一个函数,用于检查质数是否是该数的一个因子: 唯一的问题是主函数,我正在尝试这样的操作: 我知道逻辑不正确,但我真的坚持了一个多小时。 我知道这里的主要目标是循环,找到一个素数并检查
我试图解决欧拉项目问题3,即: 13195的主要因子为5、7、13和29。数字600851475143中最大的素因子是什么? 这是我的解决方案,它适用于较小的值,但对于所需的数字却无法完成:
问题内容: 该代码应该返回最大的质数。有关此任务的更多信息:https : //projecteuler.net/problem=3 我决定将checkFactors()的参数加倍,因为我试图测试为什么我的代码无法正常工作。 工作并返回“ 29”。 但是, 不起作用, “ int类型的600851475143超出范围”。 确实可以编译,但是在几秒钟后给了我ArithmeticException。