[pascal]wypisanie dzielników pierwszych

RSM
Użytkownik
Użytkownik
Posty: 197
Rejestracja: 1 lip 2011, o 21:41
Płeć: Mężczyzna
Lokalizacja: Internet
Podziękował: 9 razy
Pomógł: 13 razy

[pascal]wypisanie dzielników pierwszych

Post autor: RSM »

Jak napisać algorytm, który będzie wypisywał wszystkie dzielniki pierwsze danej liczby, ale każdy dzielnik dokładnie jeden raz?

Umiem napisać algorytm, który wypisze wszystkie dzielniki pierwsze, ale np. liczbie 8 wypisze trzy dwójki.
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[pascal]wypisanie dzielników pierwszych

Post autor: adambak »

w takim razie wystarczy drobna modyfikacja tego co już umiesz.. jak już znajdziesz dzielnik pierwszy danej liczby to go wypisz, a samą liczbę dziel przez ten dzielnik w pętli, dopóki reszta z dzielenia wciąż wynosi zero.. w ten sposób dla przykładowej ósemki jak już znajdziesz dwójkę i ją wypiszesz to dzieląc przez nią ósemkę w pętli skasujesz wszystkie dwójki w jej rozkładzie.. pętla szukająca dzielników bez zmian..
Xitami

[pascal]wypisanie dzielników pierwszych

Post autor: Xitami »

a jak już to zrobisz to wklej kod - postaramy się o konstruktywną krytykę.
RSM
Użytkownik
Użytkownik
Posty: 197
Rejestracja: 1 lip 2011, o 21:41
Płeć: Mężczyzna
Lokalizacja: Internet
Podziękował: 9 razy
Pomógł: 13 razy

[pascal]wypisanie dzielników pierwszych

Post autor: RSM »

Kod: Zaznacz cały

program dzielnikipierwsze;
var
    i:integer;
    n:integer;
    p:integer;
    s:integer;
begin
writeln('podaj liczbe');
readln(p);
n:=round(sqrt(p))+1;
for i:=2 to n do begin
    while (p mod i = 0) do begin
        while (p mod i=0) do begin
        p:= p div i;
        end;
    write(i);
    end;
end;
readln;
end.
Xitami

[pascal]wypisanie dzielników pierwszych

Post autor: Xitami »

twój program:

Kod: Zaznacz cały

program dzielnikipierwsze;
var
    i, p : integer;
begin
	writeln('podaj liczbe');
	readln(p);
	for i:=2 to trunc(sqrt(p)) do 
    		while (p mod i = 0) do begin
    			write(i, #32);
    			p:=p div i;
    		end;
	readln;
end.
A jeszcze można sporo poprawić
RSM
Użytkownik
Użytkownik
Posty: 197
Rejestracja: 1 lip 2011, o 21:41
Płeć: Mężczyzna
Lokalizacja: Internet
Podziękował: 9 razy
Pomógł: 13 razy

[pascal]wypisanie dzielników pierwszych

Post autor: RSM »

co to jest w

Kod: Zaznacz cały

write(i, #32);
?
Xitami

[pascal]wypisanie dzielników pierwszych

Post autor: Xitami »

to samo co to

czyli spacja (odstęp) ale tak lepiej widać niż

ważny jest pewien niuans, w Pascalu granice dla zmiennej sterującej pętli
liczone są tylko raz, czyli kręci się do pierwiastka z liczby podanej przez użyszkodnika
czyli jeżeli to nie jest liczba pierwsza to kręci zdecydowanie za daleko
dobrze więc byłoby zamienić for na while
ODPOWIEDZ