Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1138 NumMst  (Citit de 1216 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
andrei.12
Echipa infoarena
Nu mai tace
*****

Karma: 107
Deconectat Deconectat

Mesaje: 381



Vezi Profilul
« : Mai 01, 2011, 20:15:38 »

Aici puteti discuta despre problema NumMst.
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #1 : Mai 05, 2011, 17:34:44 »

Imi poate explica si mie cineva de ce este necesar ca n sa fie compus?
Daca avem n = 7 nu ar fi raspunsul 3 4?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #2 : Mai 05, 2011, 17:51:17 »

@Marginean Ciprian:
Complexitatea solutiei oficiala se bazeaza pe o teorema care e valabila numai in cazul numerelor compuse. Pentru numere prime complexitatea ar fi prea mare.
« Ultima modificare: Noiembrie 05, 2012, 17:53:26 de către Andrei Grigorean » Memorat
savim
Nu mai tace
*****

Karma: 194
Deconectat Deconectat

Mesaje: 333



Vezi Profilul
« Răspunde #3 : Mai 05, 2011, 17:54:30 »

Pentru n prim, putem face doua observatii:

1) Cmmdc-ul numerelor ce dau suma n va fi 1.

Dem.: Fie v1, v2..vk, astfel incat v1+v2+..+vk = n

Cmmdc(v1, v2..vk) divide n, dar n este prim, rezulta cmmdc = 1. (daca cmmdc = n rezulta k = 1 contradictie).



Acum, considerand cazul n compus, putem face urmatoarea observatie:

v1 = cmmdc * x1, v2 = cmmdc * x2 .. vk = cmmdc * xk

Noi vrem sa calculam cmmmc (v1, v2, .. vk).

Cmmmc(v1, v2 .. vk) = cmmdc(v1, v2..vk) * cmmmc(x1, x2 .. xk).

Stim ca suma x1 + x2 + ... + xk = S <= sqrt(n). (Alegem cmmdc-ul maxim => n / cmmdc <= sqrt(n)).

Problema se reduce la a gasi termenii x1, x2, .. xk astfel incat cmmmc(x1, x2, .. xk) sa fie maxim.

Acest lucru se poate rezolva cu o dinamica S * nr_prim, unde nr_prim reprezinta numarul de numere prime <= S.

2) Daca n ar fi prim, atunci x1 + x2 + .. + xk = v1 + v2 + .. + vk = n, deci solutia ar rula in O(n * nr_factori_primi <= n), ce ar depasi limita de timp, si ar forta o restrictie destul de stransa pentru n, gen 3000.

De aici vine restrictia n compus. Nu stiu daca exista un algoritm pur greedy pentru a genera cmmmc-ul maxim, si din ce stiu, toti cei care au luat 100 in concurs s-au bazat pe abordarea folosind programare dinamica.

Sper sa nu ma insel Smile.
« Ultima modificare: Noiembrie 05, 2012, 18:16:06 de către Andrei Grigorean » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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