#2556
Fie N un număr natural și expresia \( H_N = 1 + \frac{1}{2} + \frac{1}{3} + … + \frac{1}{N}\). Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile \( H_N = \frac{P}{Q}\).
Balcaniada de Informatică 2018, ziua 1
| Problema | hn | Operații I/O |
hn.in/hn.out
|
|---|---|---|---|
| Limita timp | 0.2 secunde | Limita memorie |
Total: 128 MB
/
Stivă 32 MB
|
| Id soluție | #58736964 | Utilizator | |
| Fișier | hn.cpp | Dimensiune | 6.42 KB |
| Data încărcării | 28 Iulie 2025, 19:18 | Scor/rezultat | Eroare de compilare |
hn.cpp:3:1: error: stray '\`' in program }\`\`\` ^ hn.cpp:3:1: error: stray '\`' in program hn.cpp:3:1: error: stray '\`' in program hn.cpp:4:1: error: stray '\304' in program Această buclă execută \`N\` împărțiri și \`N\` adunări pe numere mari. Aici vom concentra toate eforturile noastre. ^ hn.cpp:4:1: error: stray '\203' in program hn.cpp:4:1: error: stray '\304' in program hn.cpp:4:1: error: stray '\203' in program hn.cpp:4:1: error: stray '\304' in program hn.cpp:4:1: error: stray '\203' in program hn.cpp:4:1: error: stray '\`' in program hn.cpp:4:1: error: stray '\`' in program hn.cpp:4:1: error: stray '\303' in program hn.cpp:4:1: error: stray '\256' in program hn.cpp:4:1: error: stray '\304' in program hn.cpp:4:1: error: stray '\203' in program hn.cpp:4:1: error: stray '\310' in program hn.cpp:4:1: error: stray '\233' in program hn.cpp:4:1: error: stray '\310' in program hn.cpp:4:1: error: stray '\231' in program hn.cpp:4:1: error: stray '\`' in program hn.cpp:4:1: error: stray '\`' in program hn.cpp:4:1: error: stray '\304' in program hn.cpp:4:1: error: stray '\203' in program hn.cpp:6:1: error: stray '##' in program ### Strategia de Optimizare Finală ^ hn.cpp:6:3: error: stray '#' in program ### Strategia de Optimizare Finală ^ hn.cpp:6:1: error: stray '\304' in program ### Strategia de Optimizare Finală ^ hn.cpp:6:1: error: stray '\203' in program hn.cpp:8:1: error: stray '\`' in program 1. **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv. ^ hn.cpp:8:33: error: stray '#' in program 1. **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv. ^ hn.cpp:8:1: error: stray '\`' in program 1. **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv. ^ hn.cpp:8:1: error: stray '\310' in program hn.cpp:8:1: error: stray '\233' in program hn.cpp:8:1: error: stray '\304' in program hn.cpp:8:1: error: stray '\203' in program hn.cpp:8:1: error: stray '\304' in program hn.cpp:8:1: error: stray '\203' in program hn.cpp:8:1: error: stray '\303' in program hn.cpp:8:1: error: stray '\256' in program hn.cpp:9:5: error: stray '\`' in program * \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă. ^ hn.cpp:9:10: error: stray '#' in program * \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă. ^ hn.cpp:9:5: error: stray '\`' in program * \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă. ^ hn.cpp:9:5: error: stray '\304' in program hn.cpp:9:5: error: stray '\203' in program hn.cpp:9:5: error: stray '\304' in program hn.cpp:9:5: error: stray '\203' in program hn.cpp:10:9: error: stray '\`' in program * \`"O3"\`: Activează cel mai înalt nivel de optimizare standard, care include zeci de tehnici de transformare a codului pentru viteză. ^ hn.cpp:10:9: error: stray '\`' in program hn.cpp:10:9: error: stray '\304' in program hn.cpp:10:9: error: stray '\203' in program hn.cpp:10:9: error: stray '\303' in program hn.cpp:10:9: error: stray '\256' in program hn.cpp:10:9: error: stray '\304' in program hn.cpp:10:9: error: stray '\203' in program hn.cpp:11:9: error: stray '\`' in program * \`"unroll-loops"\`: Îi spune explicit compilatorului să "desfășoare" buclele. Aceasta este exact tehnica pe care ai menționat-o. ^ hn.cpp:11:9: error: stray '\`' in program hn.cpp:11:9: error: stray '\303' in program hn.cpp:11:9: error: stray '\216' in program hn.cpp:11:9: error: stray '\304' in program hn.cpp:11:9: error: stray '\203' in program hn.cpp:11:9: error: stray '\310' in program hn.cpp:11:9: error: stray '\233' in program hn.cpp:13:1: error: stray '\304' in program 2. **Loop Unrolling (Desfășurarea Manuală a Buclei)**: Chiar dacă am cerut compilatorului să facă asta, o putem face și manual pentru bucla critică. Acest lucru reduce "overhead"-ul buclei (costul instrucțiunilor de incrementare a contorului \`i\` și de verificare a condiției \`i <= N\`). Prin procesarea mai multor elemente într-o singură iterație, reducem numărul total de iterații. Vom procesa elementele în grupuri de 8. ^ hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\231' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\231' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\233' in program hn.cpp:13:1: error: stray '\`' in program hn.cpp:13:1: error: stray '\`' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\231' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\233' in program hn.cpp:13:1: error: stray '\`' in program hn.cpp:13:1: error: stray '\`' in program hn.cpp:13:1: error: stray '\303' in program hn.cpp:13:1: error: stray '\256' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\233' in program hn.cpp:13:1: error: stray '\304' in program hn.cpp:13:1: error: stray '\203' in program hn.cpp:13:1: error: stray '\310' in program hn.cpp:13:1: error: stray '\233' in program hn.cpp:13:1: error: stray '\303' in program hn.cpp:13:1: error: stray '\256' in program hn.cpp:15:1: error: stray '\310' in program 3. **Optimizarea Accesului la Memorie și a Operațiilor**: ^ hn.cpp:15:1: error: stray '\231' in program hn.cpp:15:1: error: stray '\310' in program hn.cpp:15:1: error: stray '\233' in program hn.cpp:16:5: error: stray '\310' in program * **Folosirea de referințe constante (\`const&\`)**: În operatorul de adunare, putem prelua rezultatul împărțirii \`Q / i\` printr-o referință constantă pentru a evita o eventuală copie inutilă a obiectului \`BigInt\`. ^ hn.cpp:16:5: error: stray '\233' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:16:5: error: stray '\303' in program hn.cpp:16:5: error: stray '\216' in program hn.cpp:16:5: error: stray '\303' in program hn.cpp:16:5: error: stray '\256' in program hn.cpp:16:5: error: stray '\304' in program hn.cpp:16:5: error: stray '\203' in program hn.cpp:16:5: error: stray '\310' in program hn.cpp:16:5: error: stray '\233' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:16:5: error: stray '\310' in program hn.cpp:16:5: error: stray '\233' in program hn.cpp:16:5: error: stray '\304' in program hn.cpp:16:5: error: stray '\203' in program hn.cpp:16:5: error: stray '\304' in program hn.cpp:16:5: error: stray '\203' in program hn.cpp:16:5: error: stray '\304' in program hn.cpp:16:5: error: stray '\203' in program hn.cpp:16:5: error: stray '\304' in program hn.cpp:16:5: error: stray '\203' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:16:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program * **Operator \`+=\`**: Vom crea un operator \`operator+=\` care modifică direct obiectul \`P\`, în loc să creeze un nou obiect temporar prin \`P + ...\` și apoi să-l atribuie înapoi la \`P\`. Acest lucru elimină multe alocări și de-alocări de memorie. ^ hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\303' in program hn.cpp:17:5: error: stray '\256' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\310' in program hn.cpp:17:5: error: stray '\231' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:17:5: error: stray '\303' in program hn.cpp:17:5: error: stray '\256' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\`' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:17:5: error: stray '\310' in program hn.cpp:17:5: error: stray '\231' in program hn.cpp:17:5: error: stray '\304' in program hn.cpp:17:5: error: stray '\203' in program hn.cpp:19:1: error: stray '##' in program ### Codul Final (Optimizare Extremă) ^ hn.cpp:19:3: error: stray '#' in program ### Codul Final (Optimizare Extremă) ^ hn.cpp:19:1: error: stray '\304' in program ### Codul Final (Optimizare Extremă) ^ hn.cpp:19:1: error: stray '\203' in program hn.cpp:21:1: error: stray '\303' in program Acest cod încorporează toate tehnicile de mai sus. Este proiectat pentru viteză maximă, păstrând compatibilitatea cu compilatoarele standard. ^ hn.cpp:21:1: error: stray '\256' in program hn.cpp:21:1: error: stray '\304' in program hn.cpp:21:1: error: stray '\203' in program hn.cpp:21:1: error: stray '\304' in program hn.cpp:21:1: error: stray '\203' in program hn.cpp:21:1: error: stray '\304' in program hn.cpp:21:1: error: stray '\203' in program hn.cpp:21:1: error: stray '\304' in program hn.cpp:21:1: error: stray '\203' in program hn.cpp:21:1: error: stray '\303' in program hn.cpp:21:1: error: stray '\242' in program hn.cpp:23:1: error: stray '\`' in program \`\`\`cpp ^ hn.cpp:23:1: error: stray '\`' in program hn.cpp:23:1: error: stray '\`' in program hn.cpp:1:1: error: expected unqualified-id before 'for' for (int i = 1; i <= N; ++i) { ^ hn.cpp:1:17: error: 'i' does not name a type for (int i = 1; i <= N; ++i) { ^ hn.cpp:1:25: error: expected unqualified-id before '++' token for (int i = 1; i <= N; ++i) { ^ hn.cpp:4:1: error: 'Aceast' does not name a type Această buclă execută \`N\` împărțiri și \`N\` adunări pe numere mari. Aici vom concentra toate eforturile noastre. ^ hn.cpp:26:43: error: expected declaration before end of line #pragma GCC optimize("O3", "unroll-loops") ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema hn face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.