一个简单的java程序,用于查找大量的最大素数因子(此处为600851475143),编译时没有错误但没有给出任何输出

-2 java output

我没有发现我的程序有任何问题.请指出我的错误并帮助我.

代码如下:

class largest
    {
    public static void main(String...args)
        {
        double n,i,f=1.0;
        n=600851475143L;
        largest ob= new largest();
         for(i=n/4;i<n/2;i++)
            {
            if(n%i==0)
                {
                  if(ob.isprime(i) == 1)
                    f=i;
                }
            }
        System.out.println(f);
        }
    int isprime(double k)
        {
        int s,i=2,flag=0;
        while(i<k && flag==0)
            {
            if(k%i==0)
                 flag=1;
            }
        if(flag==0)
            return 1;
        else
            return 0;
        }
    }
Run Code Online (Sandbox Code Playgroud)

ste*_*hke 5

isprime在大多数情况下,您的功能是无限循环.它永远不会i在循环中递增.

每次编写循环时,都应该考虑所谓的循环变量.这是循环的数字属性,即:

  1. 每个循环运行中的正整数
  2. 在循环的连续迭代期间减少

如果你不能想到这样一个属性,你就会遇到大麻烦,因为你很可能无休止地循环.

在您的示例中,该属性应该是您想要的素数因子减去您正在检查的当前素因子候选者的数字.

在你当前的代码中,如果你计算循环变量,你将得到一个正整数(好),但它不会减少(坏).因此,你将永远等待,因为你有一个无限循环.

虽然其他答案显示了很好的解决方案,使您的代码更有效,这对您没有多大帮助:一个有效的无限循环仍然不会给你任何结果.