Π Π΄Π°Π½Π½ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ big_integer ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ big_integer.h. ΠΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ:
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠΈΡΠ»ΠΎ Π½ΡΠ»Π΅ΠΌ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΠΊΠΎΠΏΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΡ int.
- Explicit ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΡ std::string.
- ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ.
- ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠ° (ΡΠ½Π°ΡΠ½ΡΠΉ ΠΌΠΈΠ½ΡΡ), ΡΠ½Π°ΡΠ½ΡΠΉ ΠΏΠ»ΡΡ.
- Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅ Π·Π° Π²ΡΠ΅ΠΌΡ O(nm), Π³Π΄Π΅ n, m β Π΄Π»ΠΈΠ½Ρ ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Π΅ΠΉ Π² Π±ΠΈΡΠ°Ρ .
- ΠΠ΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π·Π° Π²ΡΠ΅ΠΌΡ O(nm), Π³Π΄Π΅ n β Π΄Π»ΠΈΠ½Π° Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π² Π±ΠΈΡΠ°Ρ , Π° m β Π΄Π»ΠΈΠ½Π° ΡΠ°ΡΡΠ½ΠΎΠ³ΠΎ Π² Π±ΠΈΡΠ°Ρ .
- ΠΡΠ΅ΡΠΈΠΊΡΠ½ΡΠΉ/ΠΏΠΎΡΡΡΠΈΠΊΡΠ½ΡΠΉ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ/Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ. (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- ΠΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ΠΈ, ΠΈΠ»ΠΈ, ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ ΠΈΠ»ΠΈ, Π½Π΅.
- ΠΠΈΡΠΎΠ²ΡΠ΅ ΡΠ΄Π²ΠΈΠ³ΠΈ.
- ΠΠΎΠ»ΠΆΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ std::string to_string(big_integer const&), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π°.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² ΡΠ°ΠΉΠ»Π΅ big_integer.cpp.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΠΈΡΠ΅Π» ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π΅Π»ΡΠ·Ρ.
Π Π°Π·ΡΡΠ΄Ρ ΡΠΈΡΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ 32-Π±ΠΈΡΠ½ΡΠΌΠΈ Π»ΠΈΠ±ΠΎ 64-Π±ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π±ΠΈΡΡ Π² ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π»ΡΠ·Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ°Π·ΡΡΠ΄Ρ ΠΊΠ°ΠΊ 64-Π±ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ»Π°Π΄ΡΠΈΠ΅ 32-Π±ΠΈΡΠ° Π² Π½ΠΈΡ .
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΉ Π±ΠΈΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π»ΡΠ·Ρ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΡΠ΄Ρ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±ΠΈΡΠΈΠΊΠΈ, ΠΈ Π΄Π΅Π»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ 2.
Π Π΄Π°Π½Π½ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠΎ small-object ΠΈ copy-on-write ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ.
ΠΠ»ΠΈΠ½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ Π²ΡΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π·Π°Π΄Π°Π½ΠΈΡ 2 ΠΏΠ»ΡΡ:
- ΠΡΠ»ΠΈ Π² big_integer Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΈΡΠ»ΠΎ -2N β€ a β€ 2N - 1, big_integer Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ΄Π΅Π»ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ N Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π»ΡΠ±ΡΠ΅ N β₯ 30.
- Π§ΠΈΡΠ»Π° a < -2N ΠΈ a > 2N-1 Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΄Π΅Π»ΡΡΡ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ big_integer.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π° O(1) ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ nothrow.