| 
 | 
       
       	   
       	   	
	   	   	   	   
	   	   	   	          
	   
	   	   
        | 
	  	   	          
	   
	   
	   
       
	
   | 
	
		Hódító / Queosia forum 
                http://queosia.com 
                http://hodito.hu
	 | 
 
 
 | 
 
       
	
		
	
	
		| PC (hardver, szoftver, játékok stb.) Minden, ami számítógép. Kedvenc játékod megbeszélése, segítségkérés hardverügyben stb. | 
	 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-10-2011, 20:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Jun 2007 
					Location: Nyíregyháza 
					
					
						Posts: 2,975
					 
                                         
					
					
					  
      
	Activity: 1% 
	Longevity: 92% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
				 
				
			 
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  tulip
					 
				 
				Átírtam C-re a Te algoritmusodat lényegi változtatás nélkül és 4 perc 8 másodperc alatt futott le. (Ez 64 bites linux alatt futott, a NetBeans mérte az időt E5200-as procival.) C++-ról viszont az enyémet nem tudom átírni pascalra, mert objektum-orientáltan írtam és nem tudok annyira pascal-ul.   
Így néz ki a Tied, hogy lásd, nem változtattam semmit:
 
#include <stdlib.h> 
#include <math.h> 
#include <stdio.h>
 
bool prim(long unsigned long szam) { 
    long unsigned long gyok, i; 
    gyok = round(sqrt(szam)); 
    i=3; 
    while (i<=gyok) { 
        if (szam % i == 0) return false; 
        i++; 
        i++; 
    } 
    return true; 
}
 
int main(int argc, char** argv) { 
    unsigned long k = 1; 
    for (long unsigned long i = 2; i < 50000000 ; i++) { 
        if (prim(i*2-1)) {             
            k++; 
        } 
    } 
    printf("%d", k); 
    printf("\n"); 
    return (EXIT_SUCCESS); 
}  
			
		 | 
	 
	 
 Az enyém pascalban még 5 perc alatt sem futott le    Lehet ideje lenne elkezdenem tanulni a C-t... Azt mondták Pascalban iszonyatrossz az objektumorientáltság, ezért nem is fogtam hozzá    Amúgy grat a gyors algoritmusodhoz    
		
	
		
		
		
		
		
		
			
				__________________ 
				Redológia (#455305) [1/A] [SZK] 
 
Non omnis moriar (#701164) [3/G]
			 
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-11-2011, 00:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2006 
					
					
					
						Posts: 142
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 99% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
				 
				
			 
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Redback
					 
				 
				Az enyém pascalban még 5 perc alatt sem futott le    Lehet ideje lenne elkezdenem tanulni a C-t... Azt mondták Pascalban iszonyatrossz az objektumorientáltság, ezért nem is fogtam hozzá    Amúgy grat a gyors algoritmusodhoz    
			
		 | 
	 
	 
 Szerintem Pascalból C++-ra viszonylag egyszerűen, fájdalommentesen át lehet térni, mert a megszokott függvények egy kis utána olvasás után szinte ugyanúgy megvalósíthatóak. Viszont nekem úgy tűnik, hogy a C++ sokkal nagyobb szabadságot ad a megvalósításban. Ezeknek a lehetőségeknek a megismerése és használata számomra elég bonyolultnak tűnik, de kicsit barátkozva a lehetőségekkel a Pascal-t már nagyon korlátoltnak találtam és le is szoktam róla. A Java-ban viszont azt szeretem, hogy bár a C++-hoz képest nekem kötöttnek tűnik, alapból tele van egy halom hasznos, könnyen kezelhető  library-val, így kevés tudással is egyszerű benne olyan függvényeket megvalósítani, amelyekről a Pascal-os korszakomban legfeljebb csak álmodhattam. Emellett a Java programozás rákényszeríti az embert egy, a Pascaltól gyökeresen eltérő szemléletre. A C++ ilyen szempontból számomra egy lépcső volt a Pascal és a Java között.  Lehet vele ökörködni pascalos stílusban, és lehet vele tovább lépni a Pascalon. De a Java számomra sokkal egyszerűbb, mint a C++. Szerintem mindenképpen érdemes valamilyen irányban túllépni a Pascalon, és a Delphi rossz irány. Azt is próbáltam. Kecsegtető Pascal után, de a C++ vagy a Java-hoz képest elcseszett dolog.  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
            
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 20:31
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2006 
					
					
					
						Posts: 142
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 99% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  tulip
					 
				 
				Futási idő 1 perc és 19 másodperc: 
10^8-ig pontosan 5.761.455 db prím szám van.    
			
		 | 
	 
	 
 Javítottam az algoritmuson. 10^8-ig az összes prím szám megszámolása 3 másodpercre csökkent.
 
10^9-ig az összes prím szám megszámolása 34 másodperc. Pillanatnyilag nincs ötletem, hogyan lehetne ezen még tovább gyorsítani, de gondolkodom rajta.  
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 20:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Senior Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Oct 2006 
					Location: Veresegyház 
					
					
						Posts: 3,662
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 96% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  tulip
					 
				 
				Javítottam az algoritmuson. 10^8-ig az összes prím szám megszámolása 3 másodpercre csökkent. 
 
10^9-ig az összes prím szám megszámolása 34 másodperc. Pillanatnyilag nincs ötletem, hogyan lehetne ezen még tovább gyorsítani, de gondolkodom rajta. 
			
		 | 
	 
	 
 De akkor ez most azt jelenti, hogy a 10 számjegyű prímeket hamar meg tudod már találni ezzel az algoritmussal, nem?  
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 21:11
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Dec 2006 
					Location: Tatabánya/Szeged 
					
					
						Posts: 2,796
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 95% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	
		
			| 
				
					The Following 2 Users Say Thank You to Andrew For This Useful Post:
				
			 | 
			
			
		 
		 |  
	 
  
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 21:38
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Jun 2007 
					Location: Nyíregyháza 
					
					
						Posts: 2,975
					 
                                         
					
					
					  
      
	Activity: 1% 
	Longevity: 92% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		az megkérdezhetem, hogyan keresed a prímeket?   mert szerintem a gyökéig osztogatóssal ezt lehetetlen megoldani.még arra gondolok, hogy egy nagyon nagy tömbben mindig kivenni az i. és k*i. elemet, ( k eleme a pozitív egész számoknak ) majd növelni i értékét.  
		
	
		
		
		
		
		
		
			
				__________________ 
				Redológia (#455305) [1/A] [SZK] 
 
Non omnis moriar (#701164) [3/G]
			 
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 21:54
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2006 
					
					
					
						Posts: 142
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 99% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Valezius
					 
				 
				De akkor ez most azt jelenti, hogy a 10 számjegyű prímeket hamar meg tudod már találni ezzel az algoritmussal, nem? 
			
		 | 
	 
	 
 Igen, a 10 számjegyűeket elvileg megtalálom, de az még mindig sok idő. Egyelőre 10^9-ig mértem a sebességét, így csak az összes legfeljebb 9 jegyű prím számot találtam meg 34 másodperc alatt. Természetesen ebben nincs kiíratás, csak megszámoltattam.  
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 22:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Senior Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Oct 2006 
					Location: Veresegyház 
					
					
						Posts: 3,662
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 96% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Redback
					 
				 
				az megkérdezhetem, hogyan keresed a prímeket?   mert szerintem a gyökéig osztogatóssal ezt lehetetlen megoldani.még arra gondolok, hogy egy nagyon nagy tömbben mindig kivenni az i. és k*i. elemet, ( k eleme a pozitív egész számoknak ) majd növelni i értékét.  
			
		 | 
	 
	 
 Zseni vagy    
Azt hiszem pár oldallal ezelőtt ajánlotta tulip a prímszitát, ami pont ezt csinálja. 
Azóta belefutottam, hogy létezik egy komplementer prímszita eljárás is, esetleg azt kellene kipróbálni.  
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
	
		
			| 
				
					The Following User Says Thank You to Valezius For This Useful Post:
				
			 | 
			
			
		 
		 |  
	 
  
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-12-2011, 22:31
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2006 
					
					
					
						Posts: 142
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 99% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
				 
				
			 
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Redback
					 
				 
				az megkérdezhetem, hogyan keresed a prímeket?   mert szerintem a gyökéig osztogatóssal ezt lehetetlen megoldani.még arra gondolok, hogy egy nagyon nagy tömbben mindig kivenni az i. és k*i. elemet, ( k eleme a pozitív egész számoknak ) majd növelni i értékét.  
			
		 | 
	 
	 
 1, Legenerálom a prím számokat a vizsgálandó legnagyobb szám gyökéig.  
2, Megadok egy 50.000 elemes boolean tömböt (50.000 fölött nem gyorsult tovább) és darabonként eratoszthenészi szitával fedem le a teljes tartományt. De mindig csak egyetlen tömb van jelen a memóriában, azaz tologatom a lefedő tömböt.
 
Tehát először megvan az 1-es pont, ezt egyszer végzem el. Ez után, ha valamelyik számról el akarom dönteni, hogy prím-e, pl. a 120121-ről, akkor a program megvizsgálja, hogy le van-e fedve eratoszthenészi szitával. Ha nincs, akkor 120121-től kezdődően 120121+49999-ig elkészíti az eratoszthenészi szitát, figyelembe véve, hogy a tömb 0-49999-ig van sorszámozva és a 0 itt a 120121-et fogja jelölni. Természetesen itt is csak a gyök(120121+49999)-ig folyik a vizsgálat.
 
Hogy érthetőbb legyen.  Ha úgy választunk meg 2 vizsgálandó számot, hogy a különbség köztük nagyobb, mint az 50.000-es tömb, pl. 2 és 120121-ről szeretnénk eldönteni, hogy prímek-e, akkor megkeresi az algoritmus 2-50001-ig az összes prímet és megkeresi 120121-170120 között az összes prímet, tehát egy halom felesleges számolást végez. Ellenben ha pl. megnézzük a 2, 11201, 503, 57,45511, 27 számokra, akkor csak egyetlen, 2-49999-ig tömböt fog kiszámolni.
 
Tehát ez az algoritmus akkor igazán gyors, ha sorban növekvő elemeket akarunk vizsgálni.  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
            
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-14-2011, 20:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Member 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2006 
					
					
					
						Posts: 142
					 
                                         
					
					
					  
      
	Activity: 0% 
	Longevity: 99% 
	
       
  
 
					     
				 
				
			 | 
		 
		 
		
	 | 
 
    
	
    
	
	
		
		
			
			
			 
			
		
				
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Valezius
					 
				 
				Zseni vagy    
Azóta belefutottam, hogy létezik egy komplementer prímszita eljárás is, esetleg azt kellene kipróbálni.  
			
		 | 
	 
	 
 Átgondoltam. 6-ból 4 oszlopot zár ki és a maradék esetek további vizsgálatot igényelnek. Viszont a 4 kizárt oszlop tartalmazza az összes páros és az összes 3-al osztható számot, amelyet egyébként is az elsők között zárunk ki a prímszám keresések alkalmával, így valójában nem gyorsít semmit, csak egy felesleges kört futunk előtte.  
		
	
		
		
		
		
		
		
		
		
		
		
            
                  
				
                    
                        Last edited by tulip; 04-14-2011 at 20:57..
                    
                    
				
			
		
		
	
		
		
	
	
	 | 
 
 
 
	 
	
		 
	 
 
 
	
		
    
    
    
    
    
	
	
		| 
			Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
		 | 
	 
	
		| 
			 
		 | 
	 
	 
	| Thread Tools | 
	Search this Thread | 
 
	| 
	
	
	
	
	
	 | 
	
	
	
	
	
	
	
	 | 
	
 
	| Display Modes | 
	
 
	
	
	
	
	
	
		  Linear Mode 
		
		
	 
	
	
	
	 | 
	
	
 
 
    
		
	
		 
		Posting Rules
	 | 
 
	
		
		You may not post new threads 
		You may not post replies 
		You may not post attachments 
		You may not edit your posts 
		 
		
		
		
		
		HTML code is Off 
		 
		
	  | 
 
 
	 | 
	
		
	 | 
 
 
All times are GMT +1. The time now is 08:00. 
		 
	 
 
 
     	   	     	  |  
 
  
  	   
  	   	    | 
  	   	           | 
 
 
	   
	   	    | 
	   	    
  | 
   	   	   
   	   	          
 | 
 
  |