Java 我用来确定区间之间是否存在素数的代码有缺陷

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;

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 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