Un sumator pe un bit este un mic dispozitiv cu intrări şi ieşiri. El primeşte la intrare , şi . şi sunt biţii ce trebuie adunaţi, iar este transportul anterior (ca intrare). La ieşire furnizează şi . este suma, iar este transportul următor (ca ieşire). Pentru a formaliza aceste lucruri putem scrie:
(mod este restul împărţirii întregi)
(div este câtul împărţirii întregi)
Pentru a aduna numere pe biţi se folosesc astfel de sumatoare. Ele sunt legate ca în figura de mai jos, adică transportul de ieşire al unui sumator este transportul de intrare pentru următorul.
Problema cu aceste sumatoare pe mai multi biţi este că un sumator trebuie să aştepte transportul de la unitatea anterioară (exceptând primul sumator).
Dacă unui sumator pe un bit face calculul într-o secundă, atunci pentru un sumator pe biţi (format din sumatoare pe un bit) vor fi necesare secunde.
Pentru a îmbunătăţi performanţa acestor sumatoare pe biţi s-au introdus nişte unităţi capabile să anticipeze transportul, adică intrarea . Aceste unităţi verifică datele de intrare precedente şi . Dacă amândouă sunt atunci va fi , indiferent de ce primeşte acea unitate ca transport de intrare. De asemenea dacă amândouă sunt atunci va fi . Toate sumatoarele care folosind anticipaţia pot calcula transportul de la sumatorul precedent încep calculul odată cu primul sumator. Comunicarea transportului de la un sumator la următorul se realizează instantaneu.
Cercetătorii care au inventat aceste unităţi de transport vor să ştie cu cât îmbunătăţesc performanţa sistemului şi au hotărât să se facă toate adunările posibile, pentru a compara cu vechiul sistem. Prin toate adunările posibile se înţelege că se va aduna orice număr pe biţi cu orice număr pe biţi fix o dată (în total adunări). Ei vor să ştie cât au durat aceste operaţii, adică suma tuturor timpilor pentru fiecare adunare.
Cerinţă
Scrieţi un program care să determine numărul total de secunde necesare pentru toate adunările, folosind dispozitivele de anticipare.
Date de intrare
Fişierul de intrare anticip.in
conţine o singură linie pe care se află numărul natural reprezentând numărul de biţi.
Date de ieşire
Fişierul de ieşire anticip.out
va conţine o singură linie pe care va fi scris un număr natural reprezentând numărul de secunde necesare tuturor adunărilor posibile.
Restricţii şi precizări
- Problema aceasta nu are nici o legătură cu vreun balaur.
Exemplu
anticip.in
3
anticip.out
128
Explicație
adunări se realizează într-o secundă; adunări se realizează în două secunde; adunări se realizează în trei secunde.
De exemplu, adunarea necesită secunde. Adunarea necesită secunde. Adunarea necesită o secundă (primul sumator adună biţii din dreapta).