[英]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
你很親密:
count>0
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.