infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: FMI Razvan Birisan din Noiembrie 30, 2015, 19:52:57



Titlul: Problemă
Scris de: FMI Razvan Birisan din Noiembrie 30, 2015, 19:52:57
Fie n și k două numere naturale. Definim m(k) = numărul minim de înmulțiri
pentru a obține nk. Spre exemplu, pentru k =15, avem m(15) = 5, întrucât:
n * n = n^2
n^2 * n = n^3
n^3 * n^3 = n^6
n^6 * n^6 = n^12
n^12 * n^3 = n^15
Scrieți un program în C care calculează m(1) + m(2) + .... + m(200).

Am nevoie doar de o idee de rezolvare ? De un hint, de orice m-ar putea ajuta să-mi dau seama cum aș putea rezolva problema...


Titlul: Răspuns: Problemă
Scris de: Mihai Calancea din Decembrie 01, 2015, 13:30:06
Din câte știu eu nu există soluție polinomială la problema asta. https://en.wikipedia.org/wiki/Addition-chain_exponentiation.

Unde ai găsit enunțul?


Titlul: Răspuns: Problemă
Scris de: George Marcus din Decembrie 01, 2015, 13:59:57
S-a dat o problema asemanatoare la nationala ACM din 2013: http://acm.tju.edu.cn/toj/vcontest/showp9268_C.html

Poate te ajuta acea solutie http://www.infoarena.ro/blog/acm-2013-etapa-nationala-partea-ii


Titlul: Răspuns: Problemă
Scris de: Mihai Calancea din Decembrie 01, 2015, 19:39:36
Cel puțin în cazul în care ai doar adunări, soluția aia e corectă doar fiindcă n e mic.. http://stackoverflow.com/a/15856054

Să tot vedem în concurs probleme deschise care ies banal (by pure chance) pe cazuri mici. Quality stuff.


Titlul: Răspuns: Problemă
Scris de: FMI Razvan Birisan din Decembrie 02, 2015, 19:35:29
Din câte știu eu nu există soluție polinomială la problema asta. https://en.wikipedia.org/wiki/Addition-chain_exponentiation.

Unde ai găsit enunțul?

E temă de laborator... și am încercat s-o rezolv cu programare dinamică, am căutat o formulă, apoi nu am mai avut idei.