簡體   English   中英

Java顯示數字的素數因子分解

[英]Java Display the Prime Factorization of a number

因此,對於我的任務,我必須編寫一個程序,要求用戶輸入整數,然后打印出該數字的素數因子分解。 這就是我所擁有的:

import java.util.Scanner;

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);
        }
    }
}

我現在遇到的問題是每當我運行它時,比如數字15453,我得到一個從1到100的每個因子的列表及其指數,當我只想要素因子時,我被困在如何繼續。

你快到了! if-continue塊移到for循環之外。 否則,它會“繼續”最內層的循環,而不是你想要的循環。

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

或者,您可以在if (count != 0)包含System.out.println調用,因為它是continue后面的唯一語句:

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

您在ideone上的程序: 鏈接

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);
}

}

安慰:

8462696833 x 71

10086647 x 839

6857 x 1471

最大素因子:6857

你很親密:

  1. System.out.println語句必須位於for循環內,並且只顯示count>0
  2. 刪除if(count == 0) { continue; } if(count == 0) { continue; } ,這是無用的,因為你剛剛增加count

從while循環中刪除if(count == 0){continue;}語句並將其放在for循環之后。 :)

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);
    }

不確定為什么要打印乘法兩次! 這是清理過的代碼:

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("*");
                }
            }
        }
    }
}

你也可以從下面的功能中獲得一些幫助。

public int getPrimeNumber(double number) {
    int j = 0;
    while (number % 2 == 0) {
        number = number / 2;
        j = 2;
    }

    for (int i = 3; i <= number; i = i + 2) {
        while (number % i == 0) {
            number = number / i;
            j = i;
        }
    }

    return j == 0 ? 1 : j;
}

此函數將返回給定數字的最大素數因子。

首先,你的continue是在while循環中,它沒有任何效果。 最小的解決方案是

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);
        }
    }
}

但是你還有其他一些問題:

  • 你的代碼沒有被恰當地“分解”(具有諷刺意味的是,在這種情況下,“因素分解”意味着它不會被分解為函數
  • 變量名稱選擇不當
  • if足夠時,你使用goto(在這種情況下continue

更好的代碼將是

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);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM