【发布时间】:2019-01-20 12:26:06
【问题描述】:
我尝试了很多,调试了几次,一切似乎都在工作,最大的素数确实会变成最大的素数,即使它需要相当长的时间。
我无法从System.out.println 获取打印值。我可以通过调试器找到它,但值太高而无法快速找到只需按住 step over。
它也可以编译,所以我对这里的问题感到困惑。我会很高兴知道我做错了什么。
编辑:我首先编写此代码的原因是因为在站点项目 euler 中,它要求最大的质数除以底漆的值得到一个整数。
有没有一种方法至少可以让我在相同的价值下让它更快?这似乎相当不切实际。
package unit5;
public class Primefinder { public static void main(String[] args)
{
double primer = 600851475143d;
double largestprime = 0;
Boolean ifprime = false;
for(double x = 2d; x < primer; x++)
{
for(double z = 2d; z<x; z++)
{
if( (x%z == 0) && (z != x) )
{
ifprime = false;
break;
}
else {
ifprime = true;
}
}
if((ifprime != false) && (x > largestprime))
{
largestprime = x;
}
ifprime = false;
}
System.out.print(largestprime);
}
}
【问题讨论】:
-
你为什么要使用
double来处理只包含整数值的东西? -
是不是primer的值太高不能是整数?
-
我指的是数学意义上的整数值(任何没有小数位的值),而不是 Java/C 系列(一个 32 位的数字)。使用 long 代替,如果你没有小数点的位置,它不会浪费内存来存储小数点的位置
-
或者使用BigInteger,它是专为处理大整数而设计的。
-
我无法理解问题的定义。据我所知,该程序一直在计算小于底漆的最大素数。