stockIIsPrime(value){if(value < 2) return false;if(value == 2) return true;newFloat:value2 = floatsqroot(value);newi = 1;while(i++ < value2){if(value % i == 0) return false;if(i > 4) i++;}return true;}
if(i > 4) i++;
[2011.03.26 20:04:18] Prímszám teszt count: 78498 | time: 10153ms // újabb prímszám ellenõrzõ[2011.03.26 20:04:36] Prímszám teszt count: 78498 | time: 17491ms[/quote]Igaz most már tudom hogy kellene ellenõrizni de megvalósítani az már kicsit nehezebb.Az oszthatóságot csak prím számokkal kellene vizsgálni, úgy lehetne elérni a leggyorsabb ellenõrzést.Újabb gyorsabb verzió kiderült hogy while funkcióban a flootsqroot eléggé lassú: [2011.03.26 23:49:18] Prímszám teszt count: 78498 | time: 7362ms[/quote]Ez szintén 1 millió ismétlõdésnél mért idõ.Újabb fejlesztés köszönet érte Jex_nek és a hivatalos forumon Nero_3D nek is az általa írt verziónak.Így talán eddig amit elértünk ez a leggyorsabb változat: stock IsPrime(value){if(value < 2 || value & 0b1 == 0)return(value == 2);newi = 3,Float:val = floatsqroot(value);for( ; i <= val; i++, i++)if((value % i) == 0) return false;return true;} [2011.03.27 18:32:33] Prímszámteszt count: 78498 | time: 5188ms[/quote]
[2011.03.26 23:49:18] Prímszám teszt count: 78498 | time: 7362ms[/quote]Ez szintén 1 millió ismétlõdésnél mért idõ.Újabb fejlesztés köszönet érte Jex_nek és a hivatalos forumon Nero_3D nek is az általa írt verziónak.Így talán eddig amit elértünk ez a leggyorsabb változat: stock IsPrime(value){if(value < 2 || value & 0b1 == 0)return(value == 2);newi = 3,Float:val = floatsqroot(value);for( ; i <= val; i++, i++)if((value % i) == 0) return false;return true;} [2011.03.27 18:32:33] Prímszámteszt count: 78498 | time: 5188ms[/quote]
stock IsPrime(value){if(value < 2 || value & 0b1 == 0)return(value == 2);newi = 3,Float:val = floatsqroot(value);for( ; i <= val; i++, i++)if((value % i) == 0) return false;return true;}
[2011.03.27 18:32:33] Prímszámteszt count: 78498 | time: 5188ms[/quote]
if(value < 2) return false; [/quote]Tudtommal az 1 prímszám.
if(value < 2) return false;
if(value < 2) return false; Tudtommal az 1 prímszám. [/quote]Én nem tudom hogy az 1 prímszám lenne wikin 2-vel kezdõdik.http://hu.wikipedia.org/wiki/Pr%C3%ADmsz%C3%A1mokKösz jex próbálkozok még gyorsabb verziót írni ezen leírás alapján, egy kis idõbe is telik mire értelmezem, de megvannak az okai mit miért csináltam mivel a tesztek mást mutatnak, mûködõképesség terén.
igazából az elsõ rész, hogy ++i, vagy i++ az tényleg mindegy. a másik viszont már nem de mondom, c++-ban szinte felesleges ilyen gyorsítással próbálkoznod, inkább lassítás lesz belõle... ajánlanám esetleg a funkcionális nyelveket, ott tényleg maximális gyorsaságot érhetsz el
én ezekbõl sajnos egy szót nemértek de sebaj majd megtanulom ezeket is xD am f***án néz ki
stock IsPrime(value){if(value < 2) return false;if(value == 2) return true;newi = 1; newFloat:value2 = floatsqroot(value); while(i++ < value2){ if(value % i == 0) return false;if(i > 13){ i++; if(i % 3 == 0) i++; else if(i % 7 == 0) i++; else if(i % 11 == 0) i++; else if(i % 13 == 0) i++;}} return true;}
[2011.03.27 00:12:18] Prímszám teszt count: 78498 | time: 7421ms[2011.03.27 00:13:04] Prímszám teszt count: 123494 | time: 10840ms[/quote]Itt látható hogy jóval több mint 78498.De az ötlet nem rossz. Köszi.Itt a tesztelésre írt kód: #define LOOP 1000000newcount,st = GetTickCount();for(new i; i < LOOP; i++){if(IsPrime(i)) { count++;}}printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);count = 0;st = GetTickCount();for(new i; i < LOOP; i++){if(IsPrime2(i)) { count++;}}printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);
#define LOOP 1000000newcount,st = GetTickCount();for(new i; i < LOOP; i++){if(IsPrime(i)) { count++;}}printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);count = 0;st = GetTickCount();for(new i; i < LOOP; i++){if(IsPrime2(i)) { count++;}}printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);
stock IsPrime2(value){ if(value < 2) return false;if(value == 2) return true;if(value % 2 == 0) return false;new Float:val = floatsqroot(value);for(new i = 3; i<val;i+=2){ if(value % i == 0) return false;}return true;}
õõ akkor valamit elírtam.. igazából csak ilyen hatalmas számokra teszteltem xD majd holnap még kitalálok valamit.edit: stock IsPrime2(value){ if(value < 2) return false;if(value == 2) return true;if(value % 2 == 0) return false;new Float:val = floatsqroot(value);for(new i = 3; i<val;i+=2){ if(value % i == 0) return false;}return true;} ez a leggyorsabb amit írni tudtam.
nem vágom, hol hagytam le az = jelet?és mi az a (value & 0b1)?
for(new i = 3; i<val;i+=2)for(new i = 3; i<=val;i+=2)
for(new i; i < 100; i++){printf(\"Binary: %b | %d\", i, i);}