[Delphi] Liczba jako iloczyn potęg liczb pierwszych...
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[Delphi] Liczba jako iloczyn potęg liczb pierwszych...

AutorWiadomość
Temat założony przez niniejszego użytkownika
[Delphi] Liczba jako iloczyn potęg liczb pierwszych...
» 2017-10-30 00:31:34
Zadanie: Każda liczba całkowita może być jednoznacznie rozłożona na iloczyn potęg liczb pierwszych.

no to walczę..

                                 //zmienne
    prime: array[1..100] of integer;      // liczby pierwsze
    number: array[1..1000] of integer;    // liczby
    i,i2: integer;
    n: integer;  // liczba ktora rozkladamy
    licznik: integer;  // licznik ile jest pierwszych

kod buttona


             n:=StrToInt(Edit1.Text);


              number[1]:=0;
            for i:=2 to n do ;
              begin
                  number[i]:=1;
              end;
                     for i:=2 to Round(sqrt(n)) do
                      begin
                          for i2:=i+1 to n do
                            begin
                              if(i2 mod i = 0)
                                then
                                  begin
                                    number[i2]:=0;
                                  end;

                            end;
                      end;

                              licznik:=1;
                                    for i:=1 to n do
                                      begin
                                        if(number[i]=1) then
                                          begin
                                             prime[licznik]:=i;
                                             licznik:=licznik+1;
                                          end;
                                      end;

                     while n>1 do
                      begin
                        for i2:=1 to licznik-1 do
                          begin
                            if((n mod prime[i2]) = 0)
                              then
                                begin
                                n:=n div prime[i2];
                                ListBox1.Items.Add(IntToStr(prime[i2]));
                                break;
                                end;

                          end;
                      end;

chciałem wypisać wszystkie dzielniki pierwsze liczby a powtarzające się zgromadzić do tablicy przechowującej wartość potęgi .. dobre podejście ?
rozważałem jeszcze jedno acz to wydaje się najbardziej wydajne dla wielkich liczb.
P-166228
» 2017-10-30 00:36:04
//n:=n/prime[i2];                  // tutaj wyskakuje error, że "n/prime[i2] to extended ( (rzeczywista??) :O )
Bo dzielenie całkowite to div.
P-166229
Temat założony przez niniejszego użytkownika
» 2017-10-30 00:44:30
nie rozumiem.

napisałem program, który przechowuje w tablicy "prime", "licznik-1" liczb pierwszych.
sprawdza następnie liczbę n przez jakie liczby "prime" dzieli się bez reszty i powinien je wypisać do ListBoxa.


program się craszuje a ja nie mogę podzielić liczby n przez jej dzielnik, który jest liczbą pierwszą;


                  while n>1 do
                      begin
                        for i2:=1 to licznik-1 do
                          begin
                            if((n mod prime[i2]) = 0)   //prime dzieli bez reszty
                              then
                                begin
                                //n:=n/prime[i2];       // dlaczego przez prime nie moge podzielić ? skoro 9%3 = 0 to dlaczego nie mogę 9/3 całkowicie ?
P-166230
Czy ja piszę do człowieka..?
» 2017-10-30 00:56:56
n := n div prime[i2];
P-166231
Temat założony przez niniejszego użytkownika
» 2017-10-30 00:59:06
zrobiłem tak.
program się craszuje, zużycie procesora 100 % oraz pracuje w nieskończoność.

gdy wprowadzę n = 10.. to jest koniec.
P-166232
» 2017-10-30 01:09:14
No niesamowite po prostu. To w końcu się craszuje, czy działa w nieskończoność? Z pewnością dla Delphi nie istnieje żaden debugger i żadną metodą nie jesteś w stanie sprawdzić, czemu ten krótki algorytm robi pętlą więcej niż kilka obrotów.
P-166233
Temat założony przez niniejszego użytkownika
» 2017-10-30 01:18:02
to może wydawać się głupie ale...
zwrot prime crashował.
nie wiem dlaczego, być może to nazwa zastrzeżona choć nie podkreśla jej.
Pefkos dzięki za pomoc, div wielce się przydało. (trochę to głupie to dzielenie w delphi.. ale no cóż poradzić)



program działa cały kod umieszczę za chwilę, gdy go dopracuję estetycznie.
P-166234
Temat założony przez niniejszego użytkownika
KOD SPRAWNY PROGRAMU
» 2017-10-30 01:30:14
ZMIENNE

      n,i,i2,licznik: integer;
      pierwsze: array[1..500] of integer;
      number: array[1..5000] of integer;



BUTTON

n:=StrToInt(Edit1.Text);
  ListBox1.Clear;

      for i:=0 to n do
        begin
            number[i]:=1;
        end;
               for i:=2 to Round(sqrt(n)) do
                begin
                    for i2:=i+1 to n do
                      begin
                        if(i2 mod i = 0)
                          then
                            begin
                              number[i2]:=0;
                            end;

                      end;
                end;

                    licznik:=1;
                              for i:=2 to n do
                                begin
                                  if(number[i]=1) then
                                    begin
                                       pierwsze[licznik]:=i;
                                       licznik:=licznik+1;
                                    end;

                                end;


                  while n>1 do
                      begin
                        for i2:=1 to licznik-1 do
                          begin
                            if((n mod pierwsze[i2]) = 0)
                              then
                                begin
                                n:=n div pierwsze[i2];
                                ListBox1.Items.Add(IntToStr(pierwsze[i2]));
                                break;
                                end;

                          end;
                      end;
P-166235
« 1 »
 Strona 1 z 1