ํƒ€์› ๊ณก์„ ์„ ์•Œ์•„๋ณด์•˜๋‹ค๋ฉด, ์ด๊ฑธ ํ† ๋Œ€๋กœ ์•”ํ˜ธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

์œ ํ•œ์ฒด์—์„œ ์ •์˜๋œ ํƒ€์› ๊ณก์„ 

  • 2์žฅ์—์„œ ๋ณด์•˜๋˜ ํƒ€์› ๊ณก์„ ์€ โ€œ์‹ค์ˆ˜์ฒดโ€์—์„œ ์ •์˜๋˜์—ˆ๋‹ค.
    • ๋ฌดํ•œ์ง‘ํ•ฉ
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฝ‰ ์ฐฌ ๊ณก์„ ์œผ๋กœ ๋ณด์˜€๋˜ ๊ฒƒ
  • ์ด์ œ ์ด ์ •์˜๋˜๋Š” ๊ณต๊ฐ„์„ ์œ ํ•œ์ฒด๋กœ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค.
  • ๋จผ์ € ์œ ํ•œ์ฒด๋Š” ์‹ค์ˆ˜์ฒด์™€ ์ง‘ํ•ฉ์˜ ์„ฑ๊ฒฉ(์œ ํ•œ/๋ฌดํ•œ)๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋‹ค๋ฅธ ํŠน์ง•์€ ๊ทธ๋Œ€๋กœ ๊ฐ–๋Š”๋‹ค.
    • ์ฆ‰, ์‰ฝ๊ฒŒ ๋งํ•ด ์‚ฌ์น™์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๋‹ซํ˜€์žˆ๋Š” โ€œ์ฒดโ€์˜ ํŠน์„ฑ์„ ๊ฐ–๋Š”๋‹ค.
  • ์—ฌ๊ธฐ์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ๋งŒํ•œ ๊ฐœ๋…์€,
  • ์•ž์—์„œ ๋ฐฐ์šด ์  ๋ง์…ˆ์˜ ์—ฐ์‚ฐ์ด ์–ด๋–ค ์ฒด์—์„œ ์ •์˜๋˜๋Š” ์ง€์™€ ๊ด€๊ณ„์—†์ด ์œ ์ง€๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ฆ‰, ์ฒด๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด์„œ ์ผ๋ฐ˜ ๋ง์…ˆ โ†’ ๋ชจ๋“ˆ๋Ÿฌ ๋ง์…ˆ ๊ณผ ๊ฐ™์ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๋ฉด,
  • ํƒ€์› ๊ณก์„  ์œ„์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ์ •์˜ํ•œ โ€œ์  ๋ง์…ˆโ€ ์—ญ์‹œ ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ

  • ์—์„œ ์ •์˜๋œ ์œ„ ํƒ€์› ๊ณก์„ ์„ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ์ผ๋‹จ ํŠน์ • ๊ฐ’์„ ๋„ฃ์–ด ์†ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.
  • ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ๊ฐ’์„ ๋„ฃ์–ด์„œ ๊ณ„์‚ฐํ•  ์‹œ์˜ ์—ฐ์‚ฐ ๋ฐฉ๋ฒ•์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.
  • ๊ทธ๊ฒŒ ์ฐจ์ด์ ์˜ ์ „๋ถ€๋‹ค.
  • ์ด๋Ÿฐ ์—ฐ์‚ฐ ๋ฐฉ์‹์„ ์ ์šฉํ–ˆ์„ ๋•Œ, ์‹ค์ œ ๊ทธ๋ ค์ง€๋Š” ์ ๋“ค์€ ์–ด๋–ค ๋ถ„ํฌ๋ฅผ ๊ฐ€์งˆ๊นŒ?

  • ์‚ฐ์žฌ๋œ ๋ชจ์Šต์ด๋‹ค.
  • ์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์นญ์ด๋‹ค.
    • ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ถ€๋ถ„์€ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ’๋งŒ ์ผ์น˜ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฐ์ ๋„์—์„œ ์–ด๋– ํ•œ ํ†ต์ฐฐ์„ ์–ป๊ธฐ๋Š” ์–ด๋ ต๋‹ค.
  • ๋‹ค๋งŒ ๊ทธ๋Ÿผ์—๋„ ์  ๋ง์…ˆ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์œ ํ•œ์ฒด ์›์†Œ๋ฅผ ํƒ€์›๊ณก์„ ์— ๋„ฃ์–ด๋ณด๊ธฐ

  • ๋“ค์–ด๊ฐ€๋Š” ์›์†Œ๊ฐ€ ์‹ค์ˆ˜์—์„œ ์œ ํ•œ์ฒด์˜ ์›์†Œ๋กœ๋งŒ ๋ณ€๊ฒฝ๋˜๋ฉด ๋œ๋‹ค.
  • ์ด๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” FieldElement์˜ ๊ฐ ์‚ฌ์น™ ์—ฐ์‚ฐ(+, -, *, **)๋“ฑ์„ ์ •์˜ํ–ˆ์—ˆ๋‹ค.
prime = 223
a = FieldElement(0, prime)
b = FieldElement(7, prime)
 
x1 = FieldElement(170, prime)
y1 = FieldElement(142, prime)
x2 = FieldElement(60, prime)
y2 = FieldElement(139, prime)
 
print(Point(x1, y1, a, b) + Point(x2, y2, a, b))
Point(FieldElement_223(220),FieldElement_223(181))_FieldElement_223(0)_FieldElement_223(7)
  • ๊ฐ๊ฐ์— ์ธ์ž๋กœ ๋“ค์–ด๊ฐ”๋˜ x, y, a, b๊ฐ€ ๋ชจ๋‘ ์œ ํ•œ์ฒด์˜ ์›์†Œ๋กœ ๋Œ€์น˜๋˜์—ˆ๋‹ค.
  • ๊ฒฐ๊ณผ๋„ ์œ ํ•œ์ฒด์˜ ์›์†Œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฐ๊ณผ๋กœ ๋‚˜์™”๋‹ค.
  • ์œ ํ•œ์ฒด๋ผ๋ฆฌ์˜ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์ ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰๊ฐ ์ ์šฉ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ์ด๋‹ค.

ํƒ€์› ๊ณก์„  ์œ„์˜ ์ ๋“ค์˜ ์Šค์นผ๋ผ ๊ณฑ์…ˆ

  • ์Šค์นผ๋ผ ๊ณฑ์…ˆ์ด๋ž€, ํฌ๊ธฐ์— ๊ด€ํ•œ ์š”์†Œ๋ฅผ ๊ฐ ๋ฒกํ„ฐ ์ปดํฌ๋„ŒํŠธ์— ๊ณฑํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • 2์žฅ์—์„œ ์šฐ๋ฆฌ๋Š” Point๋ผ๋ฆฌ์˜ ๋ง์…ˆ์„ ์ •์˜ํ–ˆ์—ˆ๋‹ค.
prime = 223
a = FieldElement(0, prime)
b = FieldElement(7, prime)
 
x1 = FieldElement(170, prime)
y1 = FieldElement(142, prime)
x2 = FieldElement(60, prime)
y2 = FieldElement(139, prime)
 
result = Point(x1, y1, a, b)
  • ์–ด๋– ํ•œ result๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๋•Œ, result๋ฅผ ๋”ํ•œ ๊ฒƒ์„ 3result๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
result2 = result + result
result3 = result + result + result 
...
  • ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ๊ฒƒ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ ๊ตณ์ด ์ด๋Ÿฐ ํ‘œํ˜„ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์“ฐ์ž๊ณ  ์•ฝ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ์Šค์นผ๋ผ ๊ณฑ์…ˆ์ด๋ผ ํ•œ๋‹ค. ์  ๋ง์…ˆ์€ ๊ฒฐํ•ฉ๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์Šค์นผ๋ผ ๊ฐ’์„ ๊ณฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜์ž๋ฉด ํŠน์ • ์ƒ์ˆ˜ (์ด ๊ฒฝ์šฐ์—๋Š” ์œ ํ•œ์ฒด์˜ ์›์†Œ(FieldElement)๊ฐ€ ์•„๋‹ˆ๋‹ค.)๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์—ฐ์‚ฐํ• ์ง€๋ฅผ ์ •์˜ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.
def __rmul__(self, coefficient):
    coef = coefficient
    current = self
    result = self.__class__(None, None, self.a, self.b)
    while coef:
        if coef & 1:
            result += current
        current += current
        coef >>= 1
    return result
  • ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๋ณด๋ฉด โ€œ์‘? ์™œ result๋ฅผ ๋ฌดํ•œ์›์ ์œผ๋กœ ๊ฐ€์ •ํ•˜์ง€?โ€ ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Š” ์•„๋ž˜์—์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

์Šค์นผ๋ผ ๊ณฑ์…ˆ์˜ ๊ฒฐ๊ณผ

  • ์ผ๋‹จ ์Šค์นผ๋ผ ๊ณฑ์…ˆ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.
  • ์— ๋Œ€ํ•ด ์œ„์˜ ์  (170, 142)์—์„œ์˜ ๊ณฑ์…ˆ ๊ฒฐ๊ณผ์ด๋‹ค.
  • ์™ผ์ชฝ์˜ ์ˆซ์ž๋Š” ์Šค์นผ๋ผ ๊ณฑ์…ˆ ๊ณ„์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

  • ๋ณด๋ฉด 1์ด ์˜ค๋ฅธ์ชฝ ์ค‘๊ฐ„์—, 2๊ฐ€ ์™ผ์ชฝ ์ค‘๊ฐ„์— ์žˆ๋‹ค.
  • ์  ๋ง์…ˆ ์ž์ฒด๊ฐ€ โ€œ๋น„์„ ํ˜•โ€ ์—ฐ์‚ฐ์ธ๋ฐ, ๊ทธ๊ฑธ n๋ฒˆ ์ ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น„์„ ํ˜•์ด๋‹ค. ์—„์ฒญ๋‚˜๊ฒŒ ํฉ์–ด์ ธ ์žˆ๋‹ค.
  • ๊ณฑ์…ˆ์€ ๋‹จ์ˆœํžˆ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜๊ธด ํ•œ๋ฐ, ์ € ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์Šค์นผ๋ผ ๊ณ„์ˆ˜๋กœ ๋‚˜๋ˆ , ์–ด๋–ค ์ ์—์„œ ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ์ฐพ๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค.
  • ์ฆ‰, ์  ๋‚˜๋ˆ—์…ˆ์€ ์–ด๋ ค์šด ์—ฐ์‚ฐ์ด๋‹ค. (์ผ๋ฐฉํ–ฅ ํ•จ์ˆ˜)
  • ์ด ์ ์ด ํƒ€์›๊ณก์„  ์•”ํ˜ธ ๋ฐฉ๋ฒ•์˜ ์›๋ฆฌ์ด๋‹ค.
  • ์ด์‚ฐ ๋กœ๊ทธ ๋ฌธ์ œ๋ผ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

์Šค์นผ๋ผ ๊ณฑ์…ˆ์˜ ์„ฑ์งˆ

  • ์ž, ์ด์ œ ์œ„์—์„œ ์™œ ๋ฌดํ•œํžˆ ์Šค์นผ๋ผ ๊ณฑ์„ ํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฌดํ•œ ์›์ ์ด๋ผ ๊ฐ€์ •ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.
  • ์—„๋ฐ€ํ•œ ์ฆ๋ช…์€ ์•„๋‹ˆ๊ณ  ์‚ฌ๊ณ  ์‹คํ—˜์ •๋„๋ผ ์ƒ๊ฐํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.
  • ์ผ๋‹จ ๊ฒฐ๋ก ์€ ์Šค์นผ๋ผ ๊ฐ’์„ ๊ณ„์† ์ฆ๊ฐ€์‹œ์ผœ์„œ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌดํ•œ์›์ ์— ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ•™์ ์œผ๋กœ โ€œ๊ตฐโ€์„ ์ด๋ฃฌ๋‹ค๊ณ  ํ•œ๋‹ค.

  • ํŠน์ • A์— ๋Œ€ํ•ด ์ ์ด ์–ด๋–ค์‹์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•œ๋ฒˆ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค.
  • ์—ฐ์‚ฐ์ด ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ์ ์ด ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
    • ์—„๋ฐ€ํ•œ ์ฆ๋ช…์€ ์ง€์‹์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ ๋‹ค..
  • ์ด๋ ‡๊ฒŒ๋ผ๋„ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ๋‹ค.

์œ ํ•œ๊ตฐ

  • ์–ด๋–ค์  G์— ์Šค์นผ๋ผ ๊ณฑ์…ˆ์„ ํ‚ค์›Œ๊ฐ€๋ฉด์„œ ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž.
  • n์„ ๋ฌดํ•œํžˆ ํ‚ค์šธ ๊ฒฝ์šฐ ๋‹ค๋‹ค๋ฅด๋Š” ์ ์€ ํ•ญ๋“ฑ์›, ์ฆ‰ ๋ฌดํ•œ์›์ ์ด๋ฉฐ 0์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์™œ ์ด์‚ฐ ๋กœ๊ทธ ๋ฌธ์ œ์ธ๊ฐ€?

  • ์Šค์นผ๋ผ ๊ณฑ์…ˆ์€ โ€œ์  ๋ง์…ˆโ€์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•œ ๊ฒƒ์„ ํ‘œํ˜„ํ•œ ๊ฒฐ๊ณผ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ โ€œ์  ๋ง์…ˆโ€์€ ์šฐ๋ฆฌ๊ฐ€ ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด๋‚ธ ์—ฐ์‚ฐ์ผ ๋ฟ์ด๋‹ค.
  • ๊ตณ์ด โ€+โ€œ๊ธฐํ˜ธ๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•œ ๊ฒƒ์ผ ๋ฟ์ด๋ผ๋Š” ๋ง์ด๋‹ค.
  • ์ด ์—ฐ์‚ฐ์„ โ€œ์  ๊ณฑ์…ˆโ€์ด๋ผ๊ณ  ๋งํ•ด๋„ ์ „ํ˜€ ๋ฌด๋ฐฉํ•˜๋‹ค. ๋ณธ์งˆ์€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด ์  ๊ณฑ์…ˆ์„ ์—ฐ์†ํ•ด์„œ ์ ์šฉํ•œ๋‹ค๋ฉด, ๊ทธ ํ˜•ํƒœ๋Š” ์ง€์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.
    • ๋ง์…ˆ ์—ฐ์† โ†’ ์ƒ์ˆ˜๋ฅผ ๊ณฑํ•˜๋Š” ๊ผด
    • ๊ณฑ์…ˆ ์—ฐ์† โ†’ ์ง€์ˆ˜ ๊ผด
  • ์–ด๋–ค ์  P๋ฅผ 7๋ฒˆ โ€œ์—ฐ์‚ฐโ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์‹์œผ๋กœ ์ ์–ด๋ณด์ž.

์  ๋ง์…ˆ์œผ๋กœ ์ •์˜ํ•œ ๊ฒฝ์šฐ

์  ๊ณฑ์…ˆ์œผ๋กœ ์ •์˜ํ•œ ๊ฒฝ์šฐ

์ •๋ฆฌ

  • ๋ณธ์งˆ์€ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑด ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•œ ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋ณดํ†ต ์ง€์ˆ˜๊ผด๋กœ ์ •๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ โ€œ์ด์‚ฐ ๋กœ๊ทธ ๋ฌธ์ œโ€๋ผ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ณธ์งˆ์€ ๊ฐ™๋‹ค. โ€œ์  ๋ง์…ˆโ€์ด๋ผ๋Š” ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๊ณฑํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋น„์˜ˆ์ธก์„ฑ๋•Œ๋ฌธ์— ๋ฐฉ์ •์‹ ํ•ด์„์˜ ์‹œ๊ฐ„์ด ๋‹ฌ๋ผ์ง์„ ๋งํ•˜๊ณ  ์žˆ๋‹ค. (์—ญ์‚ฐ์˜ ์–ด๋ ค์›€)

์œ ํ•œ์ˆœํ™˜๊ตฐ

  • ์œ ํ•œ์ฒด์—์„œ ์ •์˜ํ•œ ํƒ€์›๊ณก์„ ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ํŠน์ • ์ ์„ ์žก๊ณ , ์Šค์นผ๋ผ ๊ณฑ์…ˆ์„ ํ• ๊ฒฝ์šฐ ๋‚˜์˜ค๋Š” ์›์†Œ๋“ค์„ ๋ฌถ์–ด โ€œ๊ตฐโ€์ด๋ผ ์นญํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•œ ์ ์— ์Šค์นผ๋ผ ๊ฐ’์„ ๊ณฑํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ตฐ์„ โ€œ์œ ํ™˜์ˆœํ™˜๊ตฐโ€์ด๋ผ ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ•œ ์ ์„ โ€œ์ƒ์„ฑ์ โ€์ด๋ผ ํ•œ๋‹ค.
  • ์‹ค์ œ๋กœ ๊ณต๊ฐœํ‚ค ์•”ํ˜ธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์œ ํ™˜์ˆœํ™˜๊ตฐ์ด๋‹ค.

๊ตฐ์˜ ํŠน์ง•

  • ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ ๋‹ซํ˜€์žˆ๋‹ค.
    • ์ฒด: ์‚ฌ์น™์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ ๋‹ซํ˜€์žˆ์—ˆ์Œ
  • ํ•ญ๋“ฑ์›์ด ์กด์žฌํ•œ๋‹ค.
    • ๋ฌดํ•œ ์›์ 
    • ์•ž์—์„œ ์ฃผ๊ตฌ์žฅ์ฐฝ ์„ค๋ช…ํ–ˆ๋‹ค.
  • ๊ตฐ์— ๋Œ€ํ•ด ๋‹ซํ˜€์žˆ๋‹ค.
    • ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด๋œ๋‹ค.
      • ๋‹จ a, b๋Š” n(์œ„์ˆ˜)๋ณด๋‹ค ์ž‘๋‹ค.
    • ์ด๊ฑด ์‰ฌ์šด๋ฐ, (a+b)๊ฐ€ n๋ณด๋‹ค ํฐ๊ฒฝ์šฐ, ์ž‘์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ฆ๋ช…ํ•˜๋ฉด๋œ๋‹ค.
    • ํฌ๋‹ค๋ฉด ์œ„์ˆ˜์— ์˜ํ•ด ๋‚˜๋ˆ„์–ด์ง„ ๋‚˜๋จธ์ง€ ์›์†Œ๋กœ ๋–จ์–ด์งˆ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์—†๋‹ค.
    • ์ž‘๋‹ค๋ฉด ๋‹น์—ฐํžˆ ๊ตฐ์•ˆ์— ๋“ค์–ด์žˆ์œผ๋‹ˆ ๋ฌธ์ œ ์—†๋‹ค.
    • ์ž์„ธํ•œ ์ฆ๋ช…์€ ์ฑ…์„ ๋ณด์ž.
  • ์—ญ์›์ด ์กด์žฌํ•œ๋‹ค.
    • ์ด๊ฒƒ๋„ ์•ž์—์„œ ๊ทธ๋ฆผ์œผ๋กœ ๋ดค์—ˆ๋‹ค. ๋ฌดํ•œ์›์ ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญ์›์ด ํ•ญ์ƒ ์กด์žฌํ–ˆ๋‹ค. (๊ทธ๋ž˜ํ”„์—์„œ x์ถ• ๋Œ€์นญ์ )
  • ๊ตํ™˜๋ฒ•์น™ ์„ฑ๋ฆฝ
  • ๊ฒฐํ•ฉ๋ฒ•์น™ ์„ฑ๋ฆฝ

Binary Expansion

  • ์ด์ œ ์™œ ์ดˆ๊ธฐ๊ฐ’์„ ๋ฌดํ•œ ์›์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์Šค์นผ๋ผ ๊ณฑ์…ˆ์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์Šค์นผ๋ผ ๊ณฑ์…ˆ์˜ ์ƒ์ˆ˜๊ฐ€ ๋งค์šฐ ํฐ ์ˆซ์ž๋ผ๋ฉด ๋ฃจํ”„๋ฅผ ๋งค์šฐ ๋งŽ์ด ๋Œ์•„์•ผ ํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๊ณฑํ•˜๋Š” ์ง€์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด, O(n)์„ O(log(n))์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
def __rmul__(self, coefficient):
    coef = coefficient
    current = self
    result = self.__class__(None, None, self.a, self.b)
    while coef:
        if coef & 1:
            result += current
        current += current
        coef >>= 1
    return result
  • ๋งŒ์•ฝ ์ƒ์ˆ˜๊ฐ€ 5์ด ๋“ค์–ด์™”๋‹ค๊ณ  ํ•˜์ž. ์šฐ๋ฆฌ๋Š” 5๋ฒˆ๋งŒ ๋”ํ•˜๋ฉด ๋œ๋‹ค.
  • ์ด ์ˆซ์ž๋Š” ์ด์ง„์ˆ˜๋กœ ์ด๋‹ค. ๋‹ค์Œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ–ˆ์„ ๋•Œ 5๋ฒˆ ๋”ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.
  • ๊ฐ€์žฅ ๋๋ถ€ํ„ฐ ์ฝ์–ด๋ณด์ž.
    • 1 (1*1)
      • ๋”ํ•˜๊ณ  ์‹ถ์€ ์ˆซ์ž๋ฅผ ํ•œ๋ฒˆ๋งŒ ๋”ํ•ด ๊ฒฐ๊ณผ์— ๋„ฃ๋Š”๋‹ค. (result = G)
      • ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๋ฅผ ์œ„ํ•ด ๋”ํ•  ์ˆซ์ž๋ฅผ 2๋ฐฐ ํ•œ๋‹ค. (๋”ํ•˜๊ธฐ) (addNumber = 2G)
    • 0 (11 + 20)
      • ๋”ํ•˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ๊ฒฐ๊ณผ์— ๋”ํ•˜์ง€ ์•Š๋Š”๋‹ค. (result = G)
      • ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๋ฅผ ์œ„ํ•ด ๋”ํ•  ์ˆซ์ž๋ฅผ 2๋ฐฐ ํ•œ๋‹ค. (๋”ํ•˜๊ธฐ) (addNumber = 4G)
    • 1 (11 + 20 + 4*1)
      • ๋”ํ•˜๊ณ  ์‹ถ์€ ์ˆซ์ž๋ฅผ ํ•œ๋ฒˆ๋งŒ ๋”ํ•ด ๊ฒฐ๊ณผ์— ๋„ฃ๋Š”๋‹ค. (result = 5G)
      • ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๋ฅผ ์œ„ํ•ด ๋”ํ•  ์ˆซ์ž๋ฅผ 2๋ฐฐ ํ•œ๋‹ค. (๋”ํ•˜๊ธฐ) (addNumber = 8G)
    • ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.
    • ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์›๋ž˜ ๊ฐ™์œผ๋ฉด 5๋ฒˆ ๋ฃจํ”„ ๋Œ๊ฒƒ์„ 3๋ฒˆ์— ๋๋ƒˆ๋‹ค.

Reference