因此,对于我的任务,我必须编写一个程序,要求用户输入整数,然后打印出该数字的素数因子分解。 这就是我所拥有的:
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的每个因子的列表及其指数,当我只想要素数因子时,我和#39;我坚持如何继续。
答案 0 :(得分:4)
你快到了!将if-continue
块移到for
循环之外。否则,它会“继续”最内层的循环,而不是你想要的循环。
while (number % i == 0) {
number /= i;
count++;
}
if (count == 0) {
continue;
}
System.out.println(i+ "**" + count);
或者,您可以在System.out.println
中附上if (count != 0)
来电,因为它是continue
之后的唯一声明:
while (number % i == 0) {
number /= i;
count++;
}
if (count != 0) {
System.out.println(i+ "**" + count);
}
您在ideone上的节目:link。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
你很亲密:
count>0
if(count == 0) { continue; }
,因为你只是增加了count
答案 3 :(得分:0)
从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);
}
答案 4 :(得分:0)
不确定为什么要打印乘法两次!这是清理过的代码:
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("*");
}
}
}
}
}
答案 5 :(得分:0)
您也可以从以下功能获得一些帮助。
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;
}
此函数将返回给定数字的最大素数因子。
答案 6 :(得分:0)
首先,你的<uses-permission-group>
在while循环中,在那里它没有任何效果。最小的修复是
continue
但是你还有其他一些问题:
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);
}
}
}
足够时,您可以使用goto(在这种情况下为continue
更好的代码将是
if