Java 我用来确定区间之间是否存在素数的代码有缺陷
Math Stack Exchange用户要求我立即在此网站上询问我的程序有什么问题 我编写了代码来确定在$n*n$到$(n+1)*(n+1)$的每个区间内是否有素数。我只是在看关于勒让德猜想的东西。这是对一篇数学堆栈交换帖子的回应。代码如下:Java 我用来确定区间之间是否存在素数的代码有缺陷,java,Java,Math Stack Exchange用户要求我立即在此网站上询问我的程序有什么问题 我编写了代码来确定在$n*n$到$(n+1)*(n+1)$的每个区间内是否有素数。我只是在看关于勒让德猜想的东西。这是对一篇数学堆栈交换帖子的回应。代码如下: for (int n = 10000; n < 90000; n++) { int m = 0; for (int i = n*n; i <= (n+1)*(n+1); i++) { int k = 0;
for (int n = 10000; n < 90000; n++)
{
int m = 0;
for (int i = n*n; i <= (n+1)*(n+1); i++)
{
int k = 0;
for (int j = 2; j <= Math.sqrt(i); j++)
{
if ((i % j) == 0)
{
k+=1;
break;
}
}
if (k == 0)
{
m+=1;
break;
}
}
if (m == 0)
{
System.out.println("The conjecture has been disproven for n = " + String.valueOf(n));
}
}
for(int n=10000;n<90000;n++)
{
int m=0;
对于(int i=n*n;i我相信您的算法是正确的。但是,Java中的数据类型int
不能容纳那么大的数字。具体来说,整数可以拥有的最大值是
Integer.MAX_VALUE = 2.147.483.647
有趣的是,选择n=46340正好是算法突破该障碍的最小n,因为
n*n = 2.147.395.600 < Integer.MAX_VALUE,
(n+1)*(n+1) = 2.147.488.281 > Integer.MAX_VALUE.
如果你想完全避开上面的障碍,你应该看看专门为这个目的设计的课程。或c)你溢出了int
@greatduck下次尝试编写一个演示你的问题的代码。如果你为这个问题这样做,你在尝试为46340
重现问题时会得到一个语法错误,因为当你尝试为其编写循环时,编译器会给你一个语法错误(int i=2147395600;i<2147488281;i++)…您可以考虑使用Apache CAMSONS MATH3检查Prime,而不是自己做,它们的例程可能比蛮力快:
Long.MAX_VALUE = 9.223.372.036.854.775.807