Phorum.ro
Your Avatar Welcome to Phorum.ro!
If you haven't registered yet, click here!
Attention Visitor:
You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.
Du-te înapoi   Phorum.ro > Web Design & Web Development > Programare > PHP > Discutii Generale

Discutii Generale Discutii generale despre PHP.

Răspunde
 
Thread Tools Moduri de afișare
Vechi 08.05.2006   #1
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Question Php cam lent!!

Nush daca e doar compul meu care le Procesor PIV la 3 GHz e lent sau e lent asa in general php`u.
Am facut un script ca sa afiseze toate numerele prime pana la o valoare data ... am incercat un script de numere prime facut de mine care l-am invatat prin clasa a IX-a :P nush cat de eficient e .probabil sunt eu buba pentru ca este php asa de lent... sau chiar nu exista un algoritm mai eficient de cat esta?nu am zis ca e cel mai eficient de aia am si postat ca sa veniti fiecare cu cate o idee de numere prime ...deci eu vreau ca sa se poata ganera de exemplu toate numere prime de la 2 pana la 600000 de exemplu intr-o secunda.. daca aveti alta varianta de script in php. sau alt limbaj de programare ..:P ps:Stiu de la scoala doar Pascalu asa ca nu ma sfatuiti cu Pascal sau C++ ca nu mi se pare interesant Ziceti ceva de genu VB sau JS sau ... ASP sau cine stie..
COD
Cod HTML:
<?php
if (isset($_POST['nr']))
	{
	$nr=$_POST['nr'];
	$i=2;
	while ($i <= $nr)
		{
		$ok=true;
		$j=2;
		while (($j <= sqrt($i))&&($ok))
			{
			if ( $i % $j == 0)
				{
				$ok=false;
				break;
				}
			else $j++;
			}
		if ($ok)
			echo 'Numarul : '.$i.'';
		$i++;
		}
	}
?>
<form action='prime.php' method='POST'>
<table border= '0'>
<tr>
<td>Dati Numarul:</td>
<td>
<input type='text' name='nr'>
</td>
<td>
<input type='submit' value='OK'>
</td>
</tr>
</table>
</table>
</form>
cam asta e cu formular cu tot
astept indicatii sau solutii ... oricum daca dau 600000 imi trece de 30 de secunde timeout
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Sponsored Links
Vechi 10.05.2006   #2
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

e prea grea problema sau ?ziceti ma chiar nu stiti un algoritm mai eficient de numere prime decat cel postat de mine ? nu ma refeream neaparat de php sau nu ma refeream neaparat de acest algoritm deci vreau sa afisez 600.000 de numere prime in mai putin de 3 secunde ... sa vedem care este primu venit cu un astfel de algoritm .. .ii raman dator si recunoscator poate nu cine stie ce dar ma framanta ... problema asta pentru ca trebuie sa existe ... un algoritm mai eficien care sa afiseze peste o jumatate de milion de numere prime ... in mai putin de 3 secunde.. in fine eu o sa astept in continuare ) daca nu gasesc rezolvare :kill: sau ii scriu la sa-mi aduca de craciun algoritmul !!!
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #3
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

Cod PHP:
<?php

function prim($x) {
$nd 0;
$y $x 2;
for (
$i=1$i<=$y$i++)
  if (
$x $i == 0$nd++;
if (
$nd == 0) return TRUE;
else return 
FALSE;
}

?>
asta il stiu dintr-a cincea
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #4
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

uite si unu recursiv daca asta nu te satisface


function prim($x,$d) {
if ($d == 1) return TRUE;
elseif ($x % $d == 0) return FALSE;
else prim($x,$d-1);
}


//si il apelezi if (prim($un_numar,$un_numar/2))
?>
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #5
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

mda astai si mai in sus postat de mine chiar mai eficient e al meu oricum al tau verifica doar daca un numar este prim .. :P fa unu ca mine adica sa afiseze toate numerele prime de la 2 pana la ... un numar de ordinilor sutelor de mii si vezi cat timp iti ia pana le afiseaza pe toate daca reusesti sa faci unu care sa afisese peste 500.000 de numere prime de la 2 la 500.000 mai bine zis in mai putin de 3 secunde toata lauda mea si stima oricum o sa mai incerc .. sa vedem si apropo in a-5a nush zau daca stiai ce-i aia informatica :P oricum ... ma bucur ca totusi a raspuns cineva la aceasta problema dar totusi astept raspuns in continuare ...
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #6
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

pai banuiesc ca tu cauti un nr prim intr-un sir si il afisezi nu?

cred k cea mai rapida metoda sa faci asta e recursiv cu divite et impera daca asa se scrie dar trebuie sa le ordonezi crescator (cel mai bine tot cu divide et impera) nu stiu daca o sa ajung la ceva asa record cum ai zis u dar o sa incerc.
si daca vrei sa mearga si mai repede mai faci 3 functii
- daca ultima cifra e para (sa vezi daca e par)
- una sa vezi daca suma cifrelor este divizibila cu 3 (sa vezi daca e div cu 3)
- suma cifrelor de pe pozitii pare minus suma cifrelor de pe pozitii impare sa fie divizibila cu 11(asta inseamna k numarul e div cu 11)

si asa elimini mai rpd niste nr.
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #7
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

hmm idei bune ... oricum o sa incerc .. sa fac un astfel de cod mai trebuia faza cu daca ultima cifra e 0 sau 5 atunci e divizibil cu 5 :P oricum is mai multe functii inca ceva... eu VREAU TOATE NUMERELE PRIME PANA LA 500.000 ... nu-mi trebuie doar unu !!! imi trebuie sa generez toate numerele pana la 500.000 in mai putin de 3 secunde!!!!SPER CA AI INTELES :P nu vreau sa le aranjez sau alte chestii doar sa le generez .. restu stiu eu ce am de facut :P oricum daca vrei iti zic problema ... sa vedem daca o rezolvi .. sau mai bine zis daca o rezolva cineva.. ) is tare curios ca eu ma chinui de cateva lunii adica .. am cam lasat-o balta dar .. acuma mam reapucat de ea:P
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #8
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

da uitasem vezi cum iese la iveala

pai e perfect atunci deci e cu un for i de la 1 la 500 000 si aplici pt fiecare nr

in ordine functia pt ultima cifra para dupaia functia pt ultima cifra 0 sau 5 dupaia cea cu 3 su dupaia cea cu 11.

te descurci cu divite et impera sau sa te ajut?
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #9
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

da zi-mi si problema ca sunt curios
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #10
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Question

ma descurc cu orice deci iti mai zic inca o data nu is incepator :P ... oricum ms de ajutor .... oricum nu vad la ce mi-ar trebuii devide-t impera? ...sau ? daca fac functiile alea de 0 sau 5 la sf sau daca suma cifrelor se imparte la 3 sau daca ... suma cifrelor de pe pozitii pare minus suma cifrelor de pe pozitii impare sa fie divizibila cu 11(asta inseamna k numarul e div cu 11) nush la ce mar ajuta devide-t impera ca eu un string de 6 cifre :P merge repede ... daca te gandeai la asta.. oricum nam chef acuma sa rezolv problema asta poate maine sau cand is mai proaspat mintal ... nu-ti zic inca problema ca poate-o faci si ma fac de ras ... ma chinui eu un pic .. u prima data fa probl asta si dupaia ... trecem la pasii urmatori .. oricum problema intraga trebuie sa faca 3 chestii foarte grele in 3 secunde prima chestie e faza cu generarea toate numerelor prime pana la 600.000 aprox.. oricum un numar peste 500.000 oricum mai vb .. apropo cati ani ai ... ?
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #11
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

am 17 d c?
divide et imper. e un altgoritm de cautare mai rpt. cauta din jumate in jumate. in fine nu prea te ajuta aici ai dreptate dar la cautare te ajuta super mult e super eficient.
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #12
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

ahaha nu ma trata ca pe un nestiutor pls ... ca sunt mai batran ) stiu ce-i aia divide et impera doar nus de ieri .. ti-am zis ca nu am ce sa caut pe aici ... asa ca ... ce sa fac cu devide et impera ... deci sper sa rezolv faza cu numerele prime.. oricum functiile tale tot nu cred ca is de ajuns .. de ex cum verifici daca un numar se imparte la 5 ... rasp:daca are la sfarsit 0 sau 5 ... cum verifici daca un numar se imparte la 7 ?? cum verifici daca un numar se imparte la 11 :rasp lai dat tu : cum verifici daca se imparte la 13 cum verifici daca un numar se imparte la 17 cum verifici daca se imparte la 19 ... si asa mai departe .. deci tot la algoritmul vechi ajungi ... doar ca cine stie ... te ajuta cat de putin .. cateva functii ... in fine .. tot the oldies are the bests... ce crezi ca suntem primi care ne gandim la algoritmi de numere prime ? cine stie poate facem cel mai aficient algoritm revolutionam algoritmu de numere prime sau nu!
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #13
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

pai nu te-am tratat ca pe un incepator(sper k pot sa folosesc pers 2 sg ) si imi cer scuze daca am lasat impresia asta. si uite intre timp mi-a mai venit o idee. deci numerele pare cu cat sunt mai mari cu atat sunt intervale mai mari intre ele si ai putea sa afli unde sunt intervalele respective si mai sari cate 10 100 ...


da si sper sa il facem pe cel mai eficient
__________________
www.Synax.lx.ro - Best free templates

Last edited by Synax_; 10.05.2006 at 22:12:37.
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #14
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

din fraza asta "divide et imper. e un altgoritm de cautare mai rpt. cauta din jumate in jumate. in fine nu prea te ajuta aici ai dreptate dar la cautare te ajuta super mult e super eficient." mai tratat ca pe un incepator oricum nu sunt eu nici as dar ce e divide et impera mai stiu si eu de prin cls a X-a.. sau a IX-a nu mai stiu ... in fine acuma ma duc sa dorm ca is rupt mai ... ma gandesc pana maine ... la tot felu de idei si sper sa apara si altii cu idei ... am sa propun si alte probleme de genu asta pentru ca ... atunci cand citesc o problema si nu o rezolv imi vine sa ma impusc ... deci nu ma las pana nu rezolv o problema citata ) "mama mi-a interzis sa mai citesc probleme al informatica" =)) glumeam ...
hai ca te las acum nb.. .mai ma gandesc pana maine si ... poate vin si cu niste functii si poate chiar cu codul cel mai eficient !
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 10.05.2006   #15
Synax_
32-Bit Member
 
Synax_'s Avatar
 
Data înregistrării: 24.04.2006
Mesaje: 48
Rep Power: 7
Synax_ is on a distinguished road
Implicit

bine poate acolo putin de tot(nesemnificativ) dar fara sa vreau si imi cer mi de scuze
nb si spor la lucru
__________________
www.Synax.lx.ro - Best free templates
Synax_ is offline   Reply With Quote
Vechi 10.05.2006   #16
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Wink

np nu trebuie sa-ti ceri scuze :!) nb si tie .
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 11.05.2006   #17
outkast
64-Bit member
 
outkast's Avatar
 
Data înregistrării: 06.02.2006
Locație: Romania
Vârsta: 27
Mesaje: 227
Rep Power: 7
outkast is on a distinguished road
Implicit

uite un algoritm care mi-a placut mie:
Cod PHP:
<?php
$startTime 
explode(' ',microtime()); //cand incepe

$n 140000;  //pana la ce nr se duce
$a = array();

$a[1] = 0;
//flaguri 1 = prim, 0 = neprim, pp ca sunt toate prime
for($i 3$i<=$n$i+=2$a[$i] = 1;  
$p 3;
while(
$p*$p <= $n)   //sqrt($n) e max dar fac asa pt ca p*p e mult mai rapid
{
    
$j $p*$p;
    while(
$j <= $n)
    {
        
$a[$j] = 0;
        
$j $j+$p;
    }
    do {
$p+=2; }while($a[$p] == 0);
}

foreach(
$a as $ind => $val)
{
 
//indecsi reprezinta nr prime, valorile sunt doar flaguri
    
if($val == 1)    echo "$ind"
}


$endTime explode(' ',microtime());
$runtime = (float)$endTime[0]+(float)$endTime[1] - (float)$startTime[0]-(float)$startTime[1];
printf('runtime: %.10f',$runtime);

?>
e destul de rapid dar mananca o gramada de memorie.
se duce doar pana la 140 000 pt ca depaseste limita de memorie pe xhost. mai merge optimizat destul de mult.

sper sa fie scris bine ca sunt destul de obosit .
/edit: am modificat putin codul pt ca nu imi placea cum calculeaza timpul de rulare, acum cred ca e mai bine
__________________
A good Manager will take you through the forest, no mater what. A Leader will take time to climb on a tree and say 'This is the wrong forest'

blog.florindinu.ro - Another boring blog

Last edited by outkast; 12.05.2006 at 19:56:24.
outkast is offline   Reply With Quote
Vechi 11.05.2006   #18
indy2kro
32-Bit Member
 
indy2kro's Avatar
 
Data înregistrării: 26.02.2006
Locație: Bucuresti
Vârsta: 27
Mesaje: 173
Rep Power: 7
indy2kro is on a distinguished road
Trimite un mesaj prin Yahoo pentru indy2kro
Implicit

PHP nu prea e extraordinar de rapid, pt aplicatii de genul asta ti-as recomanda ... clasicul C (al' de DOS) .. simplu, rapid, eficient (excelent pt probleme inutile gen sa generezi toate numerele prime sau variatiuni pe aceeasi tema).
indy2kro is offline   Reply With Quote
Vechi 12.05.2006   #19
Pr0tecT0R
32-Bit Member
 
Pr0tecT0R's Avatar
 
Data înregistrării: 13.02.2006
Mesaje: 80
Rep Power: 7
Pr0tecT0R is on a distinguished road
Implicit

tocmai asta e ca nu stiu asa de bine c++ pt .. si totusi vroiam sa fac in php chestia asta oricum lucrez la un algoritm foarte eficient :P sper sa fie si cat de cat cel mai eficient ... in curand o sa-l postez sa vedem daca aveti unu mai eficient .. cel de mai in sus nush cat de eficient e ca nu am avut timp sa-l testez inca dar o sa-l testez si o sa verific
__________________
www.tractoareonline.lx.ro --> site comercial
Vanzari tractoare si utliaje agricole!
Pr0tecT0R is offline   Reply With Quote
Vechi 12.05.2006   #20
indy2kro
32-Bit Member
 
indy2kro's Avatar
 
Data înregistrării: 26.02.2006
Locație: Bucuresti
Vârsta: 27
Mesaje: 173
Rep Power: 7
indy2kro is on a distinguished road
Trimite un mesaj prin Yahoo pentru indy2kro
Implicit

Daca stii PHP in principiu tot ce trebuie sa faci este sa scoti $ din fata variabilelor si sa definesti variabile (cu tot cu tip) .. chiar nu este asa mare greutate.
indy2kro is offline   Reply With Quote
Răspunde


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Moduri de afișare

Reguli de postare
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Pornit
emoticoanele sunt Pornit
Codul [IMG] este Pornit
Codul HTML este Pornit



Ora este GMT +3. Ora este acum 01:56:34.


Rulează cu: vBulletin Version 3.8.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Forum SEO by Zoints

XXXXXXXXXXXXXXXXXXX
Inactive Reminders By Icora Web Design