Prime Factorization Program in Java

后端 未结 12 1752
自闭症患者
自闭症患者 2021-01-03 11:11

I am working on a prime factorization program implemented in Java. The goal is to find the largest prime factor of 600851475143 (Project Euler problem 3). I think I have m

12条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-03 11:45

    I got a very similar problem for my programming class. In my class it had to calculate for an inputted number. I used a solution very similar to Stijak. I edited my code to do the number from this problem instead of using an input.

    Some differences from Stijak's code are these:

    I considered even numbers in my code.

    My code only prints the largest prime factor, not all factors.

    I don't recalculate the factorLimit until I have divided all instances of the current factor off.

    I had all the variables declared as long because I wanted the flexibility of using it for very large values of number. I found the worst case scenario was a very large prime number like 9223372036854775783, or a very large number with a prime number square root like 9223371994482243049. The more factors a number has the faster the algorithm runs. Therefore, the best case scenario would be numbers like 4611686018427387904 (2^62) or 6917529027641081856 (3*2^61) because both have 62 factors.

    public class LargestPrimeFactor
    {
        public static void main (String[] args){
            long number=600851475143L, factoredNumber=number, factor, factorLimit, maxPrimeFactor;
            while(factoredNumber%2==0)
                factoredNumber/=2;
            factorLimit=(long)Math.sqrt(factoredNumber);
            for(factor=3;factor<=factorLimit;factor+=2){
                if(factoredNumber%factor==0){
                    do  factoredNumber/=factor;
                    while(factoredNumber%factor==0);
                    factorLimit=(long)Math.sqrt(factoredNumber);
                }
            }
            if(factoredNumber==1)
                if(factor==3)
                    maxPrimeFactor=2;
                else
                    maxPrimeFactor=factor-2;
            else
                maxPrimeFactor=factoredNumber;
            if(maxPrimeFactor==number)
                System.out.println("Number is prime.");
            else
                System.out.println("The largest prime factor is "+maxPrimeFactor);
        }
    }
    

提交回复
热议问题