: index | programowanie | webmastering | algorytmika | download | projekty | słownik | grafika | flash | linki :

a l g o r y t m y > działania na liczbach >

R O Z K Ł A D   L I C Z B Y   N A   C Z Y N N I K I   P I E R W S Z E   2

 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30

 
       

Algorytm napisany przeze mnie (Barthka) jeszcze w podstawówce. Wczytuję dowolną liczbę naturalną z zakresu 1-2147483647 i wypisuje ją na ekranie w postaci iloczynu liczb pierwszych ( zgodnie z zasadą, że każdą liczbę naturalna dodatnią można zapisać w postaci iloczynu liczb pierwszych mniejszych od niej samej). Algorytm co prawda jest napisany błędnie (bo wypisuje iloczyn tylko z czterech liczb pierwszych (2,3,5,7) oraz jednej, która została po dzieleniu liczby wczytanej), przez co wypisane iloczyny nie zawsze są 'idealne', tzn. składające się z jak największych liczb pierwszych. Mimo to dla większości przypadków działa poprawnie i jest przy tym bardzo prosty do zrozumienia :).

 
program iloczyn_pierwszych;
uses crt;
var a,b,c: longint;
label podaj,poczatek;

begin
 clrscr;
 writeln ('Program wczytuje liczbę naturalną a następnie wyświetla ją na ekranie');
 writeln ('w postaci iloczynu liczb pierwszych');
 writeln;
  podaj:
 writeln ('Podaj liczbę naturalną');
 write ('a:');
 readln(a);

  if a=0 then
  begin
   writeln ('Liczba naturalną nie jest zero!');
   writeln ('Spróbuj jeszcze raz');
   goto podaj;
  end;
 if a<0 then
  begin
   writeln ('Liczą naturalną nie jest liczba ujemna!');
   writeln ('Spróbuj jeszcze raz');
   goto podaj;
  end;
writeln;
writeln ('Iloczyn liczb pierwszych, który daje nam liczbę ',a,' wygląda tak:');
write ('1');

 b:=a;
 c:=b;
  poczatek:

 if b mod 7 = 0 then
  begin
   b:=round(c/7);
   c:=b;
   write('*7');
   goto poczatek;
  end;

 if b mod 5 = 0 then
  begin
   b:=round(c*0.2);
   c:=b;
   write('*5');
   goto poczatek;
  end;

 if b mod 3 = 0 then
  begin
   b:=round(c/3);
   c:=b;
   write('*3');
   goto poczatek;
  end;

 if b mod 2 = 0 then
  begin
   b:=round(c*0.5);
   c:=b;
   write('*2');
   goto poczatek;
  end;

 if b>1 then writeln ('*',b);
 readln;

end.