Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie liczby pierwszej.
evo
post 3.12.2006, 22:59:01
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

Ostrzeżenie: (0%)
-----


Potrzebuje wygenerowac dwie bardzo duze liczby pierwsze. I nie weim jak to zrobic.

W javie jest metoda BigInteger.isProbablePrime() lecz w php nic nie moge znalezc.

Czy jest jakis trick jak to zrobic, czy musze generowac liczby losowo i jesli jest nieparzysta to testowac jej pierwszosc a do tego sam musze zimplementowac algorytm na podstawie jakiejs metody np. Fermata.
Czy sa juz jakies zimplementowane metody na to?


Interesuje mnie rowniez jak generuje sie liczby pierwsze w programach kryptograficznych.
Go to the top of the page
+Quote Post
cadavre
post 4.12.2006, 18:53:47
Post #2





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Po bardzo ciężkich 10. sekundach poszukiwań znalazłem:

http://newbc.blackcode.com/forum/index.php...art=0&rid=0
http://pl.wikipedia.org/wiki/Liczba_pierwsza (i prosty do przepisania na php kod C oraz naście algorytmów)


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
mike
post 4.12.2006, 19:07:22
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


A jaki to ma związek z php5?
Przenoszę na php.
Go to the top of the page
+Quote Post
evo
post 5.12.2006, 00:27:51
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

Ostrzeżenie: (0%)
-----


bo szukam rozwiazania dla PHP5 , a ze dawno w php nie pisalem to myslalem ze moze sa jakies biblioteki dla PHP5 ,ktorych w PHP4 nie ma i dlatego tam napisalem. winksmiley.jpg


@cadavre
To przeczytaj ten artykul ktory podales oraz te
http://en.wikipedia.org/wiki/Prime_number#Primality_tests
http://en.wikipedia.org/wiki/AKS_primality_test
http://en.wikipedia.org/wiki/Fermat_primality_test
http://en.wikipedia.org/wiki/Lucas-Lehmer_test
http://en.wikipedia.org/wiki/Solovay-Strassen_primality_test
http://en.wikipedia.org/wiki/Miller-Rabin_primality_test

i zastanow sie jaki ile czasu zajelo by testowanie liczb 128bitowych na ich pierwszoc podanym przez ciebie sposobem tongue.gif

poza tym php juz sie wyklada na 32bitowych liczbach przy obliczaniu modular exponentiation , ktore jest potrzebne do przeprowadzenia kazdego z tych testow.

NIc dlubie dalej i napisze sam cos opierajac sie na BCMath.

Ten post edytował evo 5.12.2006, 00:29:31
Go to the top of the page
+Quote Post
cadavre
post 5.12.2006, 22:42:39
Post #5





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Nie założyłeś jakie liczby mają to być. tongue.gif Po co Ci aż takie duże?


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
siemakuba
post 6.12.2006, 08:52:35
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


gmp_prob_prime" title="Zobacz w manualu php" target="_manual z http://pl.php.net/manual/pl/ref.gmp.php

funkcja sprawdza czy liczba prawdopodobnie jest liczą pierwszą. Rozszerzenie GMP nie jest standardowo dostępne w php, ale może akurat u ciebie jest / masz możliwość doinstalowania.

pozdr.
Go to the top of the page
+Quote Post
KotDomowy
post 6.12.2006, 20:00:07
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 6.12.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nudziło mi się i miałem wolne 5 minut - to przerobiłem kod na php. Działa w php4 i php5. Zmienna $j jest odpowiedzialna za ilość liczb - tu jest ustawiona na 15000.

  1. <?php
  2.  
  3. $tab[0] = 1;  // znalezione liczby pierwsze
  4.  $lim = 0; // numer kolejnej liczby pierwszej
  5.  $sq = 4;  // kwadrat liczby tab[lim]
  6.  $i=0; $j=0; $f=0;
  7.  
  8.  printf("%d", $tab[0]);
  9.  
  10.  for($i=3, $j=1; $j<15000; $i+=2)
  11.  {
  12.  if($i >= $sq)
  13.  ++$lim; $sq = $tab[$lim] * $tab[$lim];
  14.  
  15.  for($f=1; $f<$lim; $f++)
  16.  if($i % $tab[$f] == 0)
  17.  break;
  18.  
  19.  if($f >= $lim)
  20.  {
  21.  $tab[$j++] = $i;
  22.  printf(",%d", $i);
  23.  }
  24.  
  25.  }
  26.  
  27.  
  28. ?>


Nuszi

Ten post edytował KotDomowy 6.12.2006, 20:02:07


--------------------
dabkowski.cal.pl
Go to the top of the page
+Quote Post
evo
post 8.12.2006, 03:08:16
Post #8





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

Ostrzeżenie: (0%)
-----


@siemakuba

Dzieki, za info. Przegapilem GMP przeszukujac manual.


@KotDomowy

Dziekuje rowniez winksmiley.jpg


@cadavre
Bo male latwiej/szybciej sie faktoryzuje tongue.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:41