[Baekjoon/๐ŸฅˆSilverโ… ] 1629: ๊ณฑ์…ˆโญ

1 ๋ถ„ ์†Œ์š”

๐Ÿ™‹โ€โ™€๏ธ ๊ณฑ์…ˆ

์ž์—ฐ์ˆ˜ A๋ฅผ B๋ฒˆ ๊ณฑํ•œ ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค. ๋‹จ ๊ตฌํ•˜๋ ค๋Š” ์ˆ˜๊ฐ€ ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ C๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ™‹โ€โ™€๏ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— A, B, C๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. A, B, C๋Š” ๋ชจ๋‘ 2,147,483,647 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

๐Ÿ™‹โ€โ™€๏ธ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— A๋ฅผ B๋ฒˆ ๊ณฑํ•œ ์ˆ˜๋ฅผ C๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป Algoritm: ๋‹จ์ˆœ ์ œ๊ณฑ ์—ฐ์‚ฐ

๋ฌธ์ œ๋งŒ ๋ณธ๋‹ค๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ง์ ‘ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด A๋ฅผ B๋ฒˆ ๊ณฑํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„ ์ œํ•œ์ด 0.5์ดˆ๋กœ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ A, B, C ๋ชจ๋‘ 2,147,483,647 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ๋‹ค๋ฉด ์ œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค.

a, b, c = map(int, input().split())

print((a**b)%c)


๐Ÿ‘ฉโ€๐Ÿ’ป Algorithm: ๋ฐ˜๋ณต๋ฌธ, ์žฌ๊ท€๋ฅผ ํ†ตํ•œ logN ํ’€์ด

A๋ฅผ B๋ฒˆ ๊ณฑํ•˜๋Š” ํ’€์ด๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋‹ค.

๋ฐ˜๋ณต๋ฌธ์™€ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด O(logN) ์‹œ๊ฐ„๋ณต์žก๋„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•œ O(logN)์˜ ํ’€์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž!

โŒจ๏ธ ๋ฐ˜๋ณต๋ฌธ: O(logN)

#๋ฐ˜๋ณต
def power(a, b):
  ans = 1
  while b > 0:
    if b % 2 != 0:
      ans *= a
    a *= a
    b //= 2

a, b, c = map(int, input().split())
print(power(a, b))

โŒจ๏ธ ์žฌ๊ท€: O(logN)

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ์žฌ๊ท€๋ฅผ ํ†ตํ•œ O(logN)์˜ ํ’€์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž!

#์žฌ๊ท€
def power():
  if b == 1:
    return a
  
  tmp = power(a, b//2)
  if b %2:
    return a*tmp*tmp
  else:
    return tmp*tmp

a, b, c= map(int, input().split())
print(power())
  • ๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์‚ฐ๊ฐ’์„ tmp์— ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
  • ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ์ชผ๊ฐ  ํ›„, ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํ•ฉํ•ด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” โญ๋ถ„ํ•  ์ •๋ณตโญ ๊ธฐ๋ฒ•์ด ์ ์šฉ๋˜์—ˆ๋‹ค!

ํ•˜์ง€๋งŒ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(logN)์ธ ๋ฌธ์ œํ’€์ด์—์„œ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.๐Ÿ™„ ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‹คํ–‰ ์†๋„๋ฅผ ๋” ๋†’์ผ ์ˆ˜ ์žˆ์„๊นŒ??


๐Ÿ™‹โ€โ™€๏ธ ํŒŒ์ด์ฌ์—์„œ์˜ ๊ณฑ์…ˆ: ํ”ผ์—ฐ์‚ฐ์ž์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด์ž!

ํŒŒ์ด์ฌ ํ”ผ์—ฐ์‚ฐ์ž์˜ ํฌ๊ธฐ๊ฐ€ ๊ณฑ์…ˆ ์†๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์„ ํ†ตํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ณฑ์…ˆ์˜ ํ”ผ์—ฐ์‚ฐ์ž์˜ ํฌ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก 2์ง„์ˆ˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๊ณฑ์…ˆ์˜ ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฅผ ์ ์šฉํ•ด ์œ„ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด๋ณด์ž! ๋ฌธ์ œ์—์„œ๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ์ปค์ง€๋Š” ๊ฒƒ์„ ๋Œ€๋น„ํ•ด C๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ณฑ์…ˆ์—์„œ์˜ ํ”ผ์—ฐ์‚ฌ์ž ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ฐ ๋‹จ๊ณ„์—์„œ C๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

def power(a, b):
  if b == 1:
    return a%c
  
  tmp = power(a, b//2)
  while b > 0:
    if b%2:
      return (a*tmp*tmp)%c
    else:
      return (tmp*tmp)%c

a, b, c = map(int, input().split())
print(power(a, b))


๐Ÿ“ ์ฐธ๊ณ  ์ž๋ฃŒ

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ