Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> liczby pierwsze!!
Buby
post 18.05.2004, 17:19:57
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.01.2003

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


nie wiem jak napisac taki skrypt ktory pokazywalby liczby pierwsze z przedzialu od 0 do n! sad.gif Prosze o pomoc!!
Go to the top of the page
+Quote Post
Draugfor
post 18.05.2004, 17:51:44
Post #2





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 13.07.2003
Skąd: Torun/Poznan

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


http://mpp.qs.pl/XAlgorytmy/AlgPierwsze.html


--------------------
On the day I was born, the nurses all gathered 'round
And they gazed in wide wonder, at the joy they had found
Go to the top of the page
+Quote Post
czachor
post 18.05.2004, 18:02:50
Post #3





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


http://forum.php.pl/viewtopic.php?t=9193


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Buby
post 18.05.2004, 18:06:19
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.01.2003

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


thx... ale chodzilo mi bardziej o metode php.. a nie TP albo cos inengo!!
bo nie mam zielonego pojecia jak to w php napisac sad.gif i mi nie chodzi o sprawdzenie jednej liczby tylko wyswietlenuie liczb pierwszych z przedzialu od 0 do n biggrin.gif
Go to the top of the page
+Quote Post
czachor
post 18.05.2004, 18:11:23
Post #5





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


a przejrzałeś dokładnie ten topic, który wyżej zapodałem?


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Buby
post 18.05.2004, 19:51:40
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.01.2003

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


Przeczytalem to.. i dalej nie doszedlem do tego jak to zrobic sad.gif Prosze przynajmniej o liste co mam zrobic zeby to napisac sad.gif
Go to the top of the page
+Quote Post
matys
post 19.05.2004, 14:27:41
Post #7





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 7.03.2004
Skąd: Szczecin|Bukowe

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


Masz tutaj algorytm, czly dokladnie rozpisane co trzeba zrobić:
Kod
Przykład:

Odnajdziemy za pomocą sita Eratostenesa wszystkie liczby pierwsze z zakresu od 2 do 30.

Zapisujemy kolejno wszystkie liczby w tabeli.







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| 28| 29| 30 |





Teraz bieżemy pierwszą liczbę z tabeli (2) i począwszy od następnej (3) dzielimy przez nią wszystkie kolejne liczby. Te, które są przez nią podzielne wykreślamy z niej.





2 3   5   7   9   11   13   15   17   19   21   23   25   27   29  





Bieżemy kolejną liczbę (3) i dzielimy przez nią pozostałe liczby począwszy od następnej (5, bo 4 już jest wykreślone). Podzielne wykreślamy z tabeli.





2 3   5   7       11   13       17   19       23   25       29  





Kolejną liczbą w tabeli jest 5. Postępujemy jak poprzednio.





2 3   5   7       11   13       17   19       23           29  





W tym momencie możemy zakończyć nasze poszukiwania. Algorytm "mówi", że kolejne wykreślania należy powtarzać, nie dalej jak do liczby będącej zaokrąglonym w dół pierwiastkiem zakresu. U nas jest to: sqrt(30)=5.4772255.., po zaokrągleniu w dół otrzymujemy 5. W tabeli zostały już tylko liczby pierwsze.


--------------------
"Unix is like a vigvam - no windows, no gates, Apache inside"
Warsztat: Windows XP PE | Dreamweaver | Apache 1.3.29 | PHP 4.3.4 | Araneae | MYSQL 4 | Visual Studio | Dev-C++
[b]Programowanie: llllll 40%
Go to the top of the page
+Quote Post
BzikOS
post 19.05.2004, 16:45:31
Post #8





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Skrypty => php
Go to the top of the page
+Quote Post
DhuCerbin
post 19.05.2004, 17:28:47
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.06.2003

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


wzory na liczby pierwsz są :-)

wzory Wormella, Willansa ...

wzorów nie przytocze bo podręczniki zostały na kwadracie :/
Go to the top of the page
+Quote Post
NuLL
post 19.05.2004, 18:31:09
Post #10





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Wydaje mi sie ze php jest na tyle szybkie i jesli n nie jst za duze to mozna zrobic petle i sprawdzac czy liczba jest pierwszei ew. wypisac
Go to the top of the page
+Quote Post
maulus
post 19.05.2004, 18:40:02
Post #11





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 15.12.2003

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


[php:1:bb88335151]<?php

$intX = 10000; // ilosc liczb do przecedzenia przez sito
$arrPrimes = range( 1, $intX );

for( $i = 2; $i <= $intX; $i++ )
{
$z = 2;

while( $i * $z <= $intX )
{
unset( $arrPrimes[ array_search( ( $i * $z ), $arrPrimes ) ] );
$z++;
}
}


?>[/php:1:bb88335151]


ktoś już pisał ten kod na forum bodajże cudi..


--------------------
gg:5216061
Warsztat: Win XP HE | Apache - 2.0.49 | PHP - 5 RC | MySQL - 4.0.18 | Narzędzia: WinSyntax
Artykyłu v0.2beta[b]lllllllllllllllllllllllll 100%
Go to the top of the page
+Quote Post
NuLL
post 19.05.2004, 19:08:59
Post #12





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


O cos takiego mi chodzi dla poczatkujacego najlatwiej mi sie wydaje. nie wiem jak wy
Go to the top of the page
+Quote Post
talee
post 20.05.2004, 13:59:23
Post #13





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 7.09.2002
Skąd: Bydgoszcz

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


Bierzemy sobie kolejno kandydatów i próbujemy dzielić przez liczby pierwsze, które trzymamy w tablicy. Jeżeli się podzieli to ne jest pierwsza w przeciwnym wypadku est. Dzielimy tylko przez te liczby pierwsze spełniające warunek pierwsza * 2 <= kandydat.

[php:1:455022dbeb]<?php

// funkcja wypisuje wszystkie liczby
// pierwsze z zakresu od [1..$zakres]

function pierwsze($zakres) {

if ($zakres >= 2) {
echo '1 -> 2', "n";
$tab_pierwsze[] = '2'; // eliminujemy przypadek trywialny
}

$tab_pierwsze_count = 1;

$j = 2;

for ($i = 3; $i <= $zakres; $i++) {

$pierwsza = true;
$sqrt = floor(sqrt($i)) + 1;

for ($k = 0; $k < $tab_pierwsze_count; $k++) {
if ($i % $tab_pierwsze[$k] == 0) {
$pierwsza = false; // nie jest pierwsza
break;
}
if ($tab_pierwsze[$k] > $sqrt) {
break; // nie dzielimy przez p, takie że 2 * p > i
}
}

if ($pierwsza) {
$tab_pierwsze[] = $i;
++$tab_pierwsze_count;
echo "$j -> $in";
++$j;
}
}
}
?>[/php:1:455022dbeb]


--------------------
Inni dążą do doskonałości, ja nie muszę ;)
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: 20.07.2025 - 02:01