Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 1037 Produs  (Citit de 7026 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« : Mai 10, 2010, 07:57:50 »

Aici puteti discuta despre problema Produs.
Memorat

Am zis Mr. Green
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #1 : Mai 13, 2010, 13:18:29 »

daca faci operatii pe numere mari astfel:
st=dr=1;
a=1;//a nr mare
cat timp nu e sol
{
   daca a==numar
       break;
   daca a<numar
      a=a*(++dr);
   altfel
      a=a/(st++);
}

Dupa parerea mea solutia asta are complexitate O(10 000 * 100 000) aproximativ 1 miliard, dar ia 30p.
O optimizare ar fi sa transform numerele intr-o baza mai mare ca sa aibe mai putine cifre dar nu stiu cum. Any help?
Memorat
DraStiK
Nu mai tace
*****

Karma: 131
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #2 : Mai 13, 2010, 14:28:58 »

Poti obţine 80p daca logaritmezi numărul, dar nu stiu cum ai putea obţine 100p. Smile
Memorat
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #3 : Mai 13, 2010, 22:02:00 »

Si cum anume logaritmezi un numar mare?
Marind baza nu ajuta?
L.E. am aflat Very Happy
« Ultima modificare: Mai 13, 2010, 22:15:01 de către Tarca Bogdan » Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #4 : Mai 16, 2010, 12:35:21 »

Se poate obtine 100p pe ideea lui Dragos, doar ca trebuie o baza mai mare, gen 104.
Memorat
airineiv
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #5 : Mai 24, 2010, 15:20:59 »

Cum se poate logaritma un numar foarte mare?
Formula loga(b*c) = logab + logac nu ajuta.

Any help?
Memorat
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #6 : Mai 25, 2010, 12:13:43 »

Sti ca numarul ala foarte mare e format astfel n*(n+1)*(n+2)*...*(n+m) unde 1<=n<=n+m<=100000 deci sti ca factorii primi sunt mai mici ca 100000 si astfel poti logaritma numarul ala mare
Memorat
airineiv
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #7 : Mai 25, 2010, 22:35:44 »

Multumesc pentru raspuns.

Am reusit sa logaritmez numarul ala mare dar nu obtin decat 80 de puncte, chiar daca logaritmez intr-o baza mai mare (100000 = 10e5). Brick wall

Dau mai jos un fragment din codul meu:

Cod:

#define EPS 1e-6
#define LN10e5 11.512925464970228420089957273422

int Sgn(double logA, double logN)
{
if(logA - logN < -EPS)
return -1;
else if(logA - logN > EPS)
return 1;
return 0;
}
unsigned int st=2, dr=1;
double logA = 0.0;
bool ok = false;
while(!ok)
{
switch(Sgn(logA, logN))
{
case 0:
ok = true;
break;
case -1:
dr++;
logA += log((double)dr) / LN10e5;
break;
case 1:
logA -= log((double)st) / LN10e5;
st++;
break;
default:
break;
}
}
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #8 : Mai 26, 2010, 09:04:10 »

Incearca sa faci toate operatiile intr-o baza mai mare, poate asa merge .
Memorat
airineiv
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #9 : Mai 26, 2010, 09:37:20 »

Multumesc pentru raspuns, dar se pare ca nu ajuta asa mult marirea bazei. Am logaritmat chiar si in baza 10^50 (am folosit log10 ca logaritm in baza 10 si am impartit la 50, conform formulei de schimbare a bazei pentru logaritm).

Ultimele 2 teste pica testul de timp.
Memorat
victor.ionescu
Strain


Karma: -5
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #10 : Mai 26, 2010, 18:11:50 »

Eu in concurs logaritmam numarul mare si apoi cautam binar pentru fiecare inceput.
Am luat 80. Dar nu baza logaritmului era problema la mine, ci baza in care tineam numarul mare.
Tu in ce baza tii numarul mare atunci cand il descompui in factori primi?
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #11 : Mai 26, 2010, 19:54:27 »

A reusit, cu baza 104 e suficient ( si cred ca si la limita ) sa iei 100 pct.
Memorat
victor.ionescu
Strain


Karma: -5
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #12 : Mai 26, 2010, 21:08:41 »

 bun  Ok
Memorat
airineiv
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #13 : Mai 26, 2010, 21:45:44 »

Da, problema era la baza in care se tine numarul mare. Lua mult timp operatia de descompunere in factori primi a numarului mare, pentru ca foloseam baza 10.
Multumesc pentru ajutor. Dancing Yahoo!
Memorat
R.A.R
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #14 : Mai 27, 2010, 20:45:15 »

Imi poate spune cineva cum se logaritmeaza un numar mare ?Banuiesc ca se descompune in factori primi si va fi lg(nr) = p1*lg(f1)+p2*lg(f2)+..+pn*lg(fn)[fi = factorul i,pi = puterea la care apare factorul i in descompunere].Daca e asa,nu vor fi probleme cu 'precizia' ?
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #15 : Mai 28, 2010, 11:04:09 »

lg(nr)=numaru de cifre-1 ( lg=logaritm in baza 10 )
Memorat
R.A.R
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #16 : Mai 30, 2010, 10:39:04 »

Am logaritmat numarul insa niciodata L == P chiar daca valorile sunt aceleasi.
Cod:
	while(L!=P)
{
if(L<P)
L+=log10(++x);
else
L-=log10(++y);
}
La valorile 5-8 ( cand ar trebui sa se opreasca), L = 2.52634 si P = 2.52634 insa imi cauta in continuare.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #17 : Mai 30, 2010, 11:20:02 »

Vezi ca poate nu compara bine, adica din cauza zecimalelor. Incearca sa lucri cu double, daca nu ai facut-o pana acum. In rest, nu stiu ce sa zic.
Memorat
R.A.R
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #18 : Mai 30, 2010, 11:42:12 »

Problema e ca nu compara bine.Am folosit double,am inmultit cu puteri ale lui 10 pentru a elimina zecimalele dar lafel.
Memorat
gcosmin
Nu mai tace
*****

Karma: 205
Deconectat Deconectat

Mesaje: 307



Vezi Profilul
« Răspunde #19 : Mai 30, 2010, 11:45:34 »

Problema se poate rezolva si fara a folosi logaritmi, deci merge pe int fara erori de precizie. Solutia se foloseste de descompunerea in factori primi a numarului P si a numerelor posibile care pot aparea in produs (adica 1...100 000).
« Ultima modificare: Mai 30, 2010, 11:51:19 de către Gheorghe Cosmin » Memorat
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #20 : Mai 30, 2010, 11:59:59 »

Mai precis?
Impartirea lui P la fiecare factor prim (de putere_factor ori) iese din timp...
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #21 : Mai 30, 2010, 12:22:07 »

Nu chiar.
Gandeste ca ai de facut log2(N) + log3(N) + log5(N) + ... logP(N) impartirii (iar asta e un upper bound grosolan rau de tot) care in orice caz nu e foarte mare.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #22 : Iunie 08, 2010, 14:22:44 »

1. Trebuie sa citesti numarul in ordine inversa.
Ex: numarul 123456789123456789 va fi , dupa transformare, asa ( in vectorul v de la 1 -> 5 ) : 6789 2345 7891 3456 12 . Adica v[1] = 6789, v[2] = 2345 ....
2. Citeste subiectele propuse pana acum, sigur o sa te ajute.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #23 : Iunie 09, 2010, 07:13:06 »

Subiectele din acest topic.
Memorat
adysnook
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #24 : Mai 29, 2012, 12:08:39 »

Dupa ce am implementat si eu o solutie, 30p, si am citit comentariile, tot nu ma prind cum sa iau 100p.  Brick wall Cum logaritmez P? e vorba de aproximari?
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines