-1

今、この Euler プロジェクトの問題 3 を解決している間、私は少し創造的になろうとしていますが、プログラムは無限ループに陥っています。私は ArrayList を適切に使用したと思いますが、何かを忘れています。

class LargestPrimeFactor 
{
    public boolean prime(long n)
    {
        for(int i=1;i<=n-1;i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
    public ArrayList primeFactors(long n)
    {
        ArrayList<Integer> primeFactors=new ArrayList<Integer>();
        int i=2;
        while(n!=1)
        {
            if((n%i==0)&(prime(i)))
            {
                primeFactors.add(i);
                n/=i;
            }
            i++;
        }
        return primeFactors;
    }
    public int maxPrimeFactors(ArrayList<Integer> primeFactors)
    {
        int max=primeFactors.get(0);
        for(int i=0;i<primeFactors.size();i++)
        {
            if(primeFactors.get(i)>max)
            {
                max=primeFactors.get(i);
            }
        }
        return max;
    }
      }
      class DemoLargestPrimeFactor
      {
    public static void main(String args[])
    {
        LargestPrimeFactor x=new LargestPrimeFactor();
        ArrayList<Integer> list=new ArrayList<Integer>();

        try
        {
            File file=new File("D:/JavaInEclipse/EulerProjects/src/Numbers.txt");
            BufferedReader br=new BufferedReader(new FileReader(file));
            String line="";
            int n;
            while((line=br.readLine())!=null)
            {
                n=Integer.parseInt(line);
                list=x.primeFactors(n);
                System.out.println("Max Prime Factor for " + n + " is =" + x.maxPrimeFactors(list));
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
            System.out.println("File not found !!!");
        }
    }
}
4

1 に答える 1

1

また、ここで if 条件を変更することもできます。

if((n%i==0)&(prime(i))) // it should be && and not &
于 2013-09-10T20:15:46.293 に答える