infoarena

infoarena - concursuri, probleme, evaluator, articole => FMI No Stress 3 => Subiect creat de: Serban Andrei Stan din Noiembrie 17, 2012, 01:26:40



Titlul: Ubercool
Scris de: Serban Andrei Stan din Noiembrie 17, 2012, 01:26:40
Aici puteti pune intrebari la problema Ubercool (http://infoarena.ro/problema/ubercool) de la concursul FMI No Stress 3 (http://infoarena.ro/fmi-no-stress-3).


Titlul: Răspuns: Ubercool
Scris de: zzz zzz din Noiembrie 17, 2012, 13:48:25
de ce imi afiseaza Killed by signal 8(SIGFPE).
desi nu am depasit memoria si nu citesc numere prea mari
Timpul de executie este 0 pt fiecare test


Titlul: Răspuns: Ubercool
Scris de: Andrei Grigorean din Noiembrie 17, 2012, 13:56:38
Cam jeg cu erorile de precizie. Mergea precizata in enunt precizia care trebuie folosita.


Titlul: Răspuns: Ubercool
Scris de: Dragos Oprica din Noiembrie 17, 2012, 14:02:02
Cam jeg cu erorile de precizie. Mergea precizata in enunt precizia care trebuie folosita.

Merge problema si folosind long long, fara a avea nevoie de precizie.


Titlul: Răspuns: Ubercool
Scris de: Mihai Ionut Enache din Noiembrie 17, 2012, 15:44:13
cum se rezolva aceasta problema?


Titlul: Răspuns: Ubercool
Scris de: Duta Vlad din Noiembrie 17, 2012, 15:47:56
pentru fiecare exponent se cauta binar baza astfel incat pow(baza, exponent) = N. apoi se verifica daca baza este numar prim. Asta se poate face optim cu testul de primalitate miller rabin, dar in cazul de fata intra si solutia naiva in sqrt(baza), adica iei toate numerele pana la radical si vezi daca vreunu divide baza


Titlul: Răspuns: Ubercool
Scris de: Mihai Ionut Enache din Noiembrie 17, 2012, 15:52:34
asta fac si eu..iau pe rand toti exponentii de la 2 la 60 (pot sa am 2^59 < 10^18) si cu cu ajutorul cautarii binare caut baza. daca am gasit o  baza a, astfel incat a^b = x (numaru' dat pentru acel test), verific daca a este prim; aici am 2 cazuri: a < 100 000 (verific in vectorul creat cu ajutorul ciurului) si a >= 100 000 (caut in vectorul v in care am numai numere prime < 100 000 daca exista vreun numar v astfel incat a % v = 0 => nu este prim, iar in caz contrar, este prim). nu mi-a intrat decat pe un test, restul wa


Titlul: Răspuns: Ubercool
Scris de: Dan H Alexandru din Noiembrie 17, 2012, 15:55:07
testul de primalitate miller rabin

Imi dai , te rog , un link despre asa ceva ?


Titlul: Răspuns: Ubercool
Scris de: Simoiu Robert din Noiembrie 17, 2012, 15:55:35
Uite aici (http://en.wikipedia.org/wiki/Miller–Rabin_primality_test).


Titlul: Răspuns: Ubercool
Scris de: Mihai Ionut Enache din Noiembrie 17, 2012, 15:56:32
multumesc de ajutor, o sa incerc si aceasta metoda, dar vreau sa stiu ce este gresit in rationamentul meu


Titlul: Răspuns: Ubercool
Scris de: Dan H Alexandru din Noiembrie 17, 2012, 16:10:27
10x.  :ok:


Titlul: Răspuns: Ubercool
Scris de: Dragos Oprica din Noiembrie 17, 2012, 16:19:48
multumesc de ajutor, o sa incerc si aceasta metoda, dar vreau sa stiu ce este gresit in rationamentul meu

Rationamentul tau este in principu bun, doar ca implementarea nu prea e buna. De exemplu, sursa ta pentru numarul 115651132813084969 nu da un raspuns corect.

115651132813084969 este 340075187^2, deci e ubercool, iar sursa ta nu e deacord.


Titlul: Răspuns: Ubercool
Scris de: Mihai Ionut Enache din Noiembrie 17, 2012, 16:24:44
asa este, in functia in care compar a^b cu x, imi depaseste unsinged long long int. mersi drastik


Titlul: Răspuns: Ubercool
Scris de: Rares Buhai din Noiembrie 17, 2012, 18:02:39
pentru fiecare exponent se cauta binar baza astfel incat pow(baza, exponent) = N
Sau, mergea foarte bine si chestia asta: baza = pow(N, 1.0 / i).


Titlul: Răspuns: Ubercool
Scris de: Petru Trimbitas din Noiembrie 17, 2012, 18:06:22
pentru fiecare exponent se cauta binar baza astfel incat pow(baza, exponent) = N
Sau, mergea foarte bine si chestia asta: baza = pow(N, 1.0 / i).

Eu am incercat asa si nu mi-a mers. faceai vreun artificiu ?


Titlul: Răspuns: Ubercool
Scris de: Rares Buhai din Noiembrie 17, 2012, 18:10:49
pentru fiecare exponent se cauta binar baza astfel incat pow(baza, exponent) = N
Sau, mergea foarte bine si chestia asta: baza = pow(N, 1.0 / i).

Eu am incercat asa si nu mi-a mers. faceai vreun artificiu ?

Cod:
double now = pow((long double) N, 1.0 / i);
long long inow = now;
if (pow((long  double) inow, i) == N)
    ...
Nu cred ca era nevoie de long double, dar am pus asa doar ca sa ma asigur ca merge.


Titlul: Răspuns: Ubercool
Scris de: Oncescu Costin din Noiembrie 22, 2012, 15:34:15
Imi puteti da si mie niste teste mai mari,va rog?Pentru ca sa verific ca un numar n<=10^9 este prim am tinut toate numerele prime pana in 31624 si l-am impartit pe rand la toate<=sqrt(n).IIau 0 puncte cu 3TLE si 7 WA.
Multumesc anticipat.
Si inca ceva cat ar trebui sa dea pentru 0,respectiv 1?


Titlul: Răspuns: Ubercool
Scris de: Sorin Rita din Noiembrie 22, 2012, 16:30:47
Nu am rezolvat problema dar in timp nu are cum sa iti intre. Iar wa e normal sa iei pentru ca n<=10^18, deci trebuie sa retii toate numerele prime <= 10^9 si nu prea ai cum sa faci asta. Metoda ta de rezolvare nu e buna. Pentru 0 si 1 raspunsul ar trebui sa fie "NU"


Titlul: Răspuns: Ubercool
Scris de: Oncescu Costin din Noiembrie 22, 2012, 21:24:58
Eu am
n=a^b cu b>=2 =>a<=10^9.Pentru a verifica daca a este prim am luat totate numerele prime<=sqrt(a)si daca a se imparte la vre unul din ele atunci nu este prim altfel este.Nu cred ca este ceva gresit in rationamentul meu.Sau daca da as vrea un test sau mai multe sa vad de ce.
Nu ma astept la 100 de puncte dar vreau sa vad ce am gresit de iau WA.
Daca nu este niimic gresit in rationamentul meu atunci ati putea sa imi dati niste teste mai mari sa imi gasesc greseala.
Multumesc anticipat.


Titlul: Răspuns: Ubercool
Scris de: Dragos Oprica din Noiembrie 22, 2012, 21:48:09
Cod:
input:
10
66078623738400
418121490257280
1024192009
811864507620600
289852172683465681
1101642481
742726009
140802626764800
12400864
22968504

Cod:
output:
NU
NU
DA
NU
DA
DA
DA
NU
NU
NU


Titlul: Răspuns: Ubercool
Scris de: Oncescu Costin din Noiembrie 23, 2012, 11:26:21
Multumesc foarte mult,in special pt testul 5.Am luat 100 cu ideea aia.