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.
[pascal]wypisanie dzielników pierwszych
-
- 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
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..
[pascal]wypisanie dzielników pierwszych
a jak już to zrobisz to wklej kod - postaramy się o konstruktywną krytykę.
-
- 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
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.
[pascal]wypisanie dzielników pierwszych
twój program: A jeszcze można sporo poprawić
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.
-
- 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
co to jest w ?
Kod: Zaznacz cały
#32
Kod: Zaznacz cały
write(i, #32);
[pascal]wypisanie dzielników pierwszych
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
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