Java Display the Prime Factorization of a number

前端 未结 7 1526
闹比i
闹比i 2020-11-30 13:02

So for my assignment, I have to write a program that asks the user for an integer input and then print out that number\'s prime factorization. This is what I have:



        
相关标签:
7条回答
  • 2020-11-30 13:18

    For one thing, your continue is inside the while loop, where it has no effect whatsoever. The minimal fix would be

    public class PrimeFactor {
        public static void main(String[] args) {
            System.out.print("Enter a positive number: ");
            Scanner scanner = new Scanner (System.in);
            int number = scanner.nextInt();
            int count;
            for (int i = 2; i<=(number); i++) {
                count = 0;
                while (number % i == 0) {
                    number /= i;
                    count++;
                }
                if (count == 0) {
                     continue;
                }
                System.out.println(i+ "**" + count);
            }
        }
    }
    

    But you have some other problems:

    • Your code is not properly "factored" (ironically, "factored" in this context means that is is not broken up into functions
    • The variable names are poorly chosen
    • You use a goto (continue in this case) when an if would suffice

    Better code would be

    public class PrimeFactor {
        public static void main(String[] args) {
            System.out.print("Enter a positive number: ");
            Scanner scanner = new Scanner (System.in);
            printFactors(scanner.nextInt());
        }
        public static void printFactors(int product) {
            for (int factor = 2; factor <= product; factor++) {
                int exponent = 0;
                while (product % factor == 0) {
                    product /= factor;
                    exponent++;
                }
                if (exponent > 0) {
                    System.out.println(factor+ "**" + exponent);
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-30 13:21

    You're close:

    1. The System.out.println statement must be inside your for loop and only display for count>0
    2. Remove the if(count == 0) { continue; }, it's useless since you just incremented count
    0 讨论(0)
  • 2020-11-30 13:21

    Not sure why you are printing the multiplication twice! Here is the cleaned up code:

    public static void printPrimeNumbers(int prime) {
    
        int n;
    
        for (int i = 2; i <= prime; i++) {
            n = 0;
            while (prime % i == 0) {
                prime /= i;
                n++;
    
            }
    
            if (n != 0) {
                for (int j = n; j > 0; j--) {
                    System.out.print(i);
    
                    if (prime != 1) {
                        System.out.print("*");
                    }
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-30 13:24

    You are almost there! Move the if-continue block outside the for loop. Otherwise, it "continues" the inner-most loop, rather than the one you intended.

    while (number % i == 0) {
        number /= i;
        count++;
    }
    if (count == 0) {
        continue;
    }
    System.out.println(i+ "**" + count);
    

    Alternatively, you could enclose the System.out.println call in if (count != 0), because it's the only statement following the continue:

    while (number % i == 0) {
        number /= i;
        count++;
    }
    if (count != 0) {
        System.out.println(i+ "**" + count);
    }
    

    Your program on ideone: link.

    0 讨论(0)
  • 2020-11-30 13:28

    remove the if (count == 0) {continue;} statement from the while loop and put it after it, in the for loop. :)

    for (int i = 2; i<=(number); i++) {
            count = 0;
            while (number % i == 0) {
                number /= i;
                count++;
            }
            if(count==0) continue;
            System.out.println(i+ "**" + count);
        }
    
    0 讨论(0)
  • 2020-11-30 13:30
    public class _03_LargestPrimeFactor {
    
    public static void main(String[] args) {
    
        long a = 600851475143L;
    
        for(int i=2; i<(a/i); i++){                         // no factors would exist beyond a/i for a particular i
    
            while( a%i == 0){                               // if i is a factor 
                a = a/i;                                    // divide a by i else we wont get a prime number
                System.out.print(a + " x " + i + "\n");
            }
        }
    
        if(a > 1)
        System.out.println("largest prime factor: " + a);
    }
    
    }
    

    console:

    8462696833 x 71

    10086647 x 839

    6857 x 1471

    largest prime factor: 6857

    0 讨论(0)
提交回复
热议问题