Titlul: 543 Dk Scris de: Airinei Adrian din Octombrie 07, 2007, 16:02:18 Aici puteţi discuta despre problema Dk (http://infoarena.ro/problema/dk).
Titlul: Răspuns: 543 Dk Scris de: Ionescu Vlad din Octombrie 09, 2007, 17:43:07 Voi cum ati rezolvat problema? Eu m-am bazat pe niste lucruri care nu sunt garantate in enuntul problemei...
Exista vreun algoritm care sa se incadreze in timp si pentru 400 000 de numere prime distincte? Titlul: Răspuns: 543 Dk Scris de: Mircea Pasoi din Octombrie 09, 2007, 17:59:36 Exista un algoritm probabilistic numit Miller Rabin. Se gaseste si in Cormen la capitolul de Teoria numerelor.
Titlul: Răspuns: 543 Dk Scris de: Ionescu Vlad din Octombrie 09, 2007, 20:22:41 Interesant.. eu ma folosisem de algortimul lui Fermat, dar vad ca asta e mai putin probabil sa dea rezultate gresite. O sa implementez si asa, mersi!
Titlul: Răspuns: 543 Dk Scris de: Bogdan-Cristian Tataroiu din Octombrie 09, 2007, 20:27:29 Poti precalcula numerele compuse care iti ies prime cu ce-ai facut si sa cauti binar dup-aia. pentru bazele 2, 3, 7 sunt 700 numere ...
Titlul: Răspuns: 543 Dk Scris de: Gheorghe Cosmin din Octombrie 09, 2007, 20:52:55 e teorema lui fermat, nu algoritmul :)
Titlul: Răspuns: 543 Dk Scris de: Florin Ghesu din Octombrie 16, 2007, 07:25:55 salutare... am si eu o intrebare.. am rezolvat problema cu algoritmul miller - rabin si ptr 7 baze iau 80 cu TLE, ptr 6 baze 90 cu TLE si ptr 5 baze deja 70 cu TLE si incorect :-k bazele le generez aleator cu o functie random, nu e totusi ceva mai optim ? mersi :)
Titlul: Răspuns: 543 Dk Scris de: Mircea Dima din Octombrie 16, 2007, 08:12:24 Incearca baze numere prime. eu am folosit 2 3 5 7 si am luat 100
Titlul: Răspuns: 543 Dk Scris de: Paul-Dan Baltescu din Octombrie 16, 2007, 08:51:37 Bazele 2, 7 si 61 dau 100% rezultatul corect pentru numere mai mici ca 10^9.
Titlul: Răspuns: 543 Dk Scris de: Adrian Diaconu din Februarie 16, 2008, 15:20:17 S-a facut o reevaluare la aceasta problema.
Titlul: Răspuns: 543 Dk Scris de: gaboru corupt din Aprilie 13, 2008, 20:55:10 si daca aplic ciurul lui eratostene, si dupa citesc fiecare element, verific daca e prim, si daka e, incrementez ceva...daka ati putea sa imi dati un contra exemplu... :peacefingers:
Titlul: Răspuns: 543 Dk Scris de: Bogdan-Alexandru Stoica din Aprilie 13, 2008, 21:07:42 pana la un miliard sunt muuulte numere prime :) cum te-ai gandit sa le stochezi?
Titlul: Răspuns: 543 Dk Scris de: gaboru corupt din Aprilie 13, 2008, 21:28:40 dar zice ca n<=400.000 ...deci nu cred ca ar fi o problema in a genera ciurul...
Titlul: Răspuns: 543 Dk Scris de: Adrian Diaconu din Aprilie 13, 2008, 22:03:32 Dar mai zice si ca
Citat 1 ≤ Xi ≤ 109 deci tu ar trebui sa faci ciurul pana la 109. Titlul: Răspuns: 543 Dk Scris de: Mandu Dragos din Ianuarie 07, 2009, 23:31:00 daca folosesc ciurul 8) ...as lua ceva puncte la problema asta :'( ? si nu inteleg dc imi da Killed by signal :annoyed:
Titlul: Răspuns: 543 Dk Scris de: Stefan-Alexandru Filip din Ianuarie 07, 2009, 23:47:27 daca folosesc ciurul 8) ...as lua ceva puncte la problema asta :'( ? si nu inteleg dc imi da Killed by signal :annoyed: In C/C++ elementele unui tablou unidimensional de N elemente sunt indexate de la 0 la N-1. Sa zicem ca tabloul este numit T, daca este accesat T[N], in linux, este returnat semnalul 11.Titlul: Răspuns: 543 Dk Scris de: Mihai Alex Ionescu din Martie 01, 2009, 06:41:14 Am si eu cateva intrebari(si observatii) legate de aceasta problema
1) inainte sa pun conditia daca Nr e 1 atunci fals luam 20p, dupa am ajuns la 90 2) trebuie parsata citirea ? inainte sa parsez luam TLE pe 7 teste. Cu parsare scot max 1.8sec. Totusi ar mai trebui optimizat algoritmu sa intre si fara parsare? 3) E ceva special la testul 1 ? Nu-l iau de nici o culoare :) edit: am gasit, pe 2 il vedea ca nr compus lol... Titlul: Răspuns: 543 Dk Scris de: Tirca Bogdan din Aprilie 09, 2009, 17:41:07 mika era sa-ti dau dreptate :D... ca de ce daca nu iau 1 in considerare iau decat 20. Chestia e ca testele la care luam WA contineau pe 1:)) :fighting: :fighting: :fighting: :fighting:
Titlul: Răspuns: 543 Dk Scris de: Emilian Paraicu din Iulie 25, 2009, 15:40:09 Am incercat sa folosesc alogritmul baza pe Teorema lui Fermat si ceea ce trebuia sa verific era daca (a^n -a)%n==0 -- unde a=numarul ales la intamplare 1>a>n; iar n numarul pe care il verificam. Problema este ca daca avem de ex. n=200 si a= 50, atunci 50^200 devine cam greu de calculat fara sa iesi din memorie :D. Presupun ca iti poti da seama daca (a^n -a)%n==0 fara sa calculezi, dar nu prea stiu cum :sad:
Titlul: Răspuns: 543 Dk Scris de: Pripoae Teodor Anton din Iulie 25, 2009, 21:10:30 Daca stii cat este restul impartirii lui a la n, atunci poti afla si restul impartirii lui a ^ n la n, ridicand la putere in timp logaritmic.
Titlul: Răspuns: 543 Dk Scris de: Pirtoaca George Sebastian din Aprilie 08, 2012, 12:57:35 Folosesc algoritmul probabilistic numit Miller Rabin si iau TLE pe 6 teste ( cu ridicare la putere in timp logaritmic pentru bazele 2,7 si 61 ) . Ce as mai putea optimiza? Multumesc anticipat!
Am reusit in cele din urma, dar cred ca ar trebui marita limita de timp macar pana la 1 sec, oricum in O(n*sqrt(Xi)) nu intra . Titlul: Răspuns: 543 Dk Scris de: Alexandru Valeanu din Ianuarie 30, 2013, 12:31:07 Am si eu o intrebare : ce gresesc la rezolvare de imi da cu orice baza asi alege 30p?
Titlul: Răspuns: 543 Dk Scris de: Radu-Andrei Szasz din Februarie 12, 2013, 20:54:42 Cred ca ar trebui marita limita de timp la aceasta problema.
Iau TLE pe un test folosind algoritmul lui Miller-Rabin cu 3 baze, ridicare la putere in timp logaritmic si parsarea citirii. Titlul: Răspuns: 543 Dk Scris de: zzz zzz din Februarie 13, 2013, 10:57:25 Fa decat cu doua baze
Titlul: Răspuns: 543 Dk Scris de: Alexandru Valeanu din Martie 31, 2013, 23:36:45 Iau 90p cu WA pe primul test in conditiile in care am parsat citirea, am implementat MillerRabin folosind 2 baze ( 2, 61 ). Poate cineva sa-mi spuna unde gresesc sau daca testul 1 are ceva special?
Titlul: Răspuns: 543 Dk Scris de: Alex Velea din Aprilie 09, 2013, 16:15:21 Poate iti pica testul 1 pt ca 1 nu e prim :)
Titlul: Răspuns: 543 Dk Scris de: Alexandru Valeanu din Aprilie 10, 2013, 10:43:17 Nu, nu poate fi asta deoarece am pus conditie de iesire din functie puntru un numar <2.
Titlul: Răspuns: 543 Dk Scris de: Simoiu Robert din Aprilie 10, 2013, 10:54:10 Sunt numere relativ mici si s-ar putea ca testul de primalitate sa pice. Incearca pentru numere sa zicem < 10.000 sa faci testul in sqrt(N), s-ar putea sa mearga.
Titlul: Răspuns: 543 Dk Scris de: Alexandru Valeanu din Aprilie 10, 2013, 17:16:07 Mersi mult pentru idee...am gasit una ceva mai eficienta cred eu: ciurul pana la 100000 si pentru orice peste Miller-Rabin....mersi inca o data pentru. :)
Titlul: Răspuns: 543 Dk Scris de: FMI Trifan Mircea Mihai din Aprilie 10, 2013, 23:22:15 eu am folosit bazele 2 si 29 si am luat 100 :banana:
ce-i drept a durat ceva pana sa-l gasesc pe 29 ca merge :D Titlul: Răspuns: 543 Dk Scris de: Petru Trimbitas din Aprilie 19, 2013, 19:29:55 Am citit articolul de pe wikipedia si nu inteleg de ce merge mai bine miller rabin decat fermat
Titlul: Răspuns: 543 Dk Scris de: FMI Trifan Mircea Mihai din Aprilie 21, 2013, 10:34:48 pai miller rabin se bazeaza pe mica teorema a lui fermat. chestia e ca daca numarul iese ca fiind prim pentru cateva baze sunt sanse mici ca el sa fie de fapt compus si aici intervine optimizarea din miller rabin: daca atunci vand faci exponentierea logaritmica gasesti o radacina netriviala a lui 1 atunci numarul este cu siguranta compus chiar daca respecta conditia micii teoreme a lui fermat. de exemplu numarul 561 respecta conditia micii teoreme a lui fermat chiar daca nu este prim (se divide cu 3) dar daca iei numarul 67 ca baza si incepi sa faci exponentierea prima data va trebui sa faci 67^2 pentru ca 561 - 1 = 560 este par si observi ca (67^2) % 561 == 1 deci ai gasit o radacina netriviala a lui 1 deci numarul este compus :D
|