2012-09-24 23 views
6

Tak więc dla mojego przypisania, muszę napisać program, który prosi użytkownika o wprowadzenie liczby całkowitej, a następnie wydrukuje faktoryczny współczynnik liczbowy tego numeru. To jest to, co mam:Java Wyświetl pierwszą factorizację numeru

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

Problem mam teraz jest, że gdy uruchamiam go, jak, numer 15453, dostaję listę każdego czynnika od 1 do 100, a jej wykładnikiem kiedy tylko chcę czynników głównych i utknąłem, jak postępować.

+0

Czy możesz używać rekursji, funkcji, klas bibliotecznych? Wystarczy uzyskać uchwyt na to, co możesz tutaj użyć. – thatidiotguy

+3

To polecenie 'continue' nie będzie wykonywane zbyt często ... – Keppil

Odpowiedz

0

jesteś blisko:

  1. Oświadczenie System.out.println musi być wewnątrz pętli for i tylko wyświetlaczem count>0
  2. Zdjąć if(count == 0) { continue; }, to jest bezużyteczne, ponieważ po prostu zwiększany count
4

Już prawie jesteś! Przenieś blok if-continue poza pętlę . W przeciwnym razie "kontynuuje" najbardziej wewnętrzną pętlę, a nie tę, którą zamierzałeś.

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

Alternatywnie, można dołączyć wezwanie System.out.println w if (count != 0), ponieważ jest to jedyna wypowiedź po continue:

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

Twój program na ideone: link.

0

usunąć instrukcję if (count == 0) {continue;} z pętli while i umieścić ją za nią w pętli 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); 
    } 
0

Nie wiem, dlaczego dwukrotnie powtarzasz mnożenie! Oto oczyszczony kod:

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

możesz również uzyskać pomoc z poniższej funkcji.

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

Funkcja ta zwróci największy współczynnik prime z podanej liczby.

0

Po pierwsze, Twój continue znajduje się w pętli while, gdzie nie ma żadnego efektu.Minimalna poprawka byłaby

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

Ale masz jakieś inne problemy:

  • Twój kod nie jest właściwie „uwzględnione” (ironicznie „uwzględnić” w tym kontekście oznacza, że ​​nie jest podzielone na funkcje
  • nazwy zmiennych są źle dobrane
  • użyć goto (continue w tym przypadku), gdy if wystarczyłoby

Lepsze kod byłby

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

} 

konsola:

8462696833 x 71

10086647 x 839

6857 x 1471

największym główny czynnik: 6857

+0

wyjaśnij to szczegółowo –