Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java查找最大素数因子_Java_Prime Factoring - Fatal编程技术网

使用java查找最大素数因子

使用java查找最大素数因子,java,prime-factoring,Java,Prime Factoring,我想找到最大的素因子600851475143。我写了下面的代码,但没有得到正确的答案。请帮帮我 public class A { public static void main(String[] args) { int arr[]=new int[25]; int large=0; long n=600851475143L; long x=(long) Math.sqrt(n); Top: for(int i=3;i<x;i=i+2)

我想找到最大的素因子600851475143。我写了下面的代码,但没有得到正确的答案。请帮帮我

public class A {
  public static void main(String[] args) {

    int arr[]=new int[25];
    int large=0;
    long n=600851475143L;
    long x=(long) Math.sqrt(n);
    Top:  for(int i=3;i<x;i=i+2)
    {
      if(n%i==0)
      {
        n=(long) n/i;
        for(int j=0;j<25;j++)
        {
          arr[j]=i;
        }
        break Top;
      }
    }
    //System.out.println(arr);
    int num=arr.length; 
    for(int i=0;i<num-1;i++)
    {
      if(arr[i]>arr[i+1])
      {
        large=arr[i];
      }
      else
      {
        large=arr[i+1]; 
      }
    }

    System.out.println(large); 
  }
}
这是一个简单的实现,可以找到这个数的最大素因子。
优化的一种方法是不将lpf增加1,而是将其设置为下一个最高质数

正确答案是什么?你得到了什么?你实现了什么算法?你试过调试吗?我在这里没有看到任何与素数有关的东西。实际上,这个程序似乎离我很近。它似乎可能返回一个数字中的第二大素数因子。我的建议是:从一个较小的数字开始。例如,21。当你尝试使用21而不是6000亿并进行更改时,你的程序会做什么?此外,它可能需要大量收紧。比如,数组的意义是什么?是你自己写的吗?你明白吗?为什么要用相同的数字填充arr,然后尝试在其中找到最大的值?很抱歉,我是新手。我需要时间来考虑有效的算法。顺便说一下,我发现了错误。我必须将大变量声明为long而不是int。很抱歉,但我是新手。我需要时间来考虑有效的算法。顺便说一下,我发现了这个错误。我必须将大变量声明为long而不是int。
public class LPF {
    public static void main(String[] args) {
        int lpf= 2;
        long num = 600851475143L; 
        while (num > lpf) {
            if (num % lpf == 0) {
                num/=lpf;
                lpf = 2;
            } else {
                lpf++;
            }
        }
        System.out.println("Largest prime factor is " + Integer.toString(lpf));
    }
}