Rozkład na czynniki pierwsze - licznik pętli

anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Rozkład na czynniki pierwsze - licznik pętli

Post autor: anika91 »

Chcę napisać program który będzie dokonywał rozkładu liczby na czynniki pierwsze.
Napisałam coś takiego:

Kod: Zaznacz cały

import java.util.Scanner;

public class Lab10zad5 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int n;
		System.out.println("Podaj liczbę:" );
		n=sc.nextInt();
		
		System.out.print(n+" = ");
		
		
		  for (int i = 2 ; i<= n ; i++) {

			
	            while (n % i == 0) {
	                System.out.print(i + "*"); 
	                n = n / i;
	            }
	        }
	       
	}
		
}
I problem pojawia się gdy podam np. liczbę 12, wtedy program zwraca:

Kod: Zaznacz cały

12 = 2*2*3*
Wszystko fajnie tylko ta ostatnia gwiazdka jest mi niepotrzebna.
W internecie znalazłam kod programu który ma nieco inaczej sformułowany 'licznik - u mnie jest i<=n , a tutaj jest i<=n/1 ' w pętli for . :

Kod: Zaznacz cały

for (int i = 2; i <= n / i; i++) {
			
                           pętla while...

			   
	 }
		if (n > 1) {
			System.out.println(n);
		}
Wtedy program działa prawidłowo , nie dopisuje tej ostatniej gwiazdki .
Czy ktoś potrafi wytłumaczyć skąd taki warunek w tej pętli For, a później jeszcze dodany ten IF na końcu ?

Dziękuje
Rycho
Użytkownik
Użytkownik
Posty: 38
Rejestracja: 16 gru 2009, o 08:33
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 1 raz
Pomógł: 5 razy

Rozkład na czynniki pierwsze - licznik pętli

Post autor: Rycho »

Zamiast:

Kod: Zaznacz cały

               while (n % i == 0) {
                   System.out.print(i + "*");
                   n = n / i;
               }
można wstawić:

Kod: Zaznacz cały

               while (n % i == 0) {
                   System.out.print(i);
                   if( n!=i ){
                       System.out.print("*");
                   }
                   n = n / i;
               }
ODPOWIEDZ