したがって、私の割り当てでは、ユーザーに整数入力を要求するプログラムを作成してから、その数の素因数分解を出力する必要があります。これは私が持っているものです:
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);
_
または、_System.out.println
_呼び出しをif (count != 0)
で囲むこともできます。これは、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
乗算を2回印刷する理由がわかりません!クリーンアップされたコードは次のとおりです。
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("*");
}
}
}
}
}
一つには、あなたの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);
}
}
}
しかし、他にもいくつか問題があります。
continue
で十分な場合は、goto(この場合はif
)を使用しますより良いコードは
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);
}
}
}
}
if(count == 0){continue;}ステートメントをwhileループから削除し、その後、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);
}
あなたは近いです:
count>0
_に対してのみ表示される必要がありますif(count == 0) { continue; }
を削除します。count
をインクリメントしただけなので、役に立ちません。以下の関数からもいくつかの助けを得ることができます。
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;
}
この関数は、指定された数の最大の素因数を返します。