Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

13-seongwon030 #55

Merged
merged 1 commit into from
Jun 30, 2024
Merged

13-seongwon030 #55

merged 1 commit into from
Jun 30, 2024

Conversation

seongwon030
Copy link
Collaborator

πŸ”— 문제 링크

ν”Όλ³΄λ‚˜μΉ˜ 수 6

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

3μ‹œκ°„

✨ μˆ˜λ„ μ½”λ“œ

μ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜μ—μ„œ λΆ„ν•  정볡 뢀뢄을 보닀가 ν–‰λ ¬μ œκ³±μœΌλ‘œ ν”Όλ³΄λ‚˜μΉ˜ 수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ–΄μ„œ ν’€μ–΄λ΄€μŠ΅λ‹ˆλ‹€.
μ˜ˆμ „μ— ν’€μ—ˆλ˜ ν–‰λ ¬μ œκ³± μ—μ„œλŠ” μƒˆλ‘œμš΄ λ³€μˆ˜μ— μž…λ ₯행렬을 μ €μž₯해놓고
ν–‰λ ¬κ³±μœΌλ‘œ 계속 κ°±μ‹ ν•΄μ£Όμ—ˆλŠ”λ° 이 λ¬Έμ œμ—μ„œλŠ” μ–΄λ–»κ²Œ 기쑴값을 μ €μž₯ν•˜λ©΄μ„œ 행렬곱을 진행해야 ν•˜λŠ”μ§€ 감을 μž‘κΈ°κ°€ μ–΄λ €μ› λ‹€.

행렬을 μ΄μš©ν•œ ν”Όλ³΄λ‚˜μΉ˜ 계산

스크란샷 2024-05-23 13 25 59

ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ˜ μ •μ˜λ₯Ό μ‚¬μš©ν•΄μ„œ F(i+1) = F(i) + F(i-1) κ³Ό F(i) = F(i) + 0λ₯Ό μ„Έμ› λ‹€. μ—¬κΈ°μ„œ 각 항을 μƒμˆ˜μ™€ F둜 λ‚˜λˆ„μ–΄ ν–‰λ ¬μ˜ 곱으둜 λ°”κΎΈλ©΄

스크란샷 2024-05-23 13 28 02

μ΄λ ‡κ²Œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

image
λ§ˆμ§€λ§‰μœΌλ‘œ 점화식을 μ„Έμš°λ©΄ μ΄λŸ°μ‹μ΄ λ‚˜μ˜¨λ‹€.

κ΅¬ν˜„

ν–‰λ ¬μ œκ³±μ—°μ‚°μ€ μœ„μ˜ ν–‰λ ¬μ œκ³±λ¬Έμ œμ—μ„œ μ‚¬μš©ν–ˆλ˜ ν•¨μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν–ˆλ‹€.

def matrixmult(A, B, mod):  # ν–‰λ ¬ κ³± 계산
    n = len(A)
    C = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            for k in range(n):
                C[i][j] += A[i][k] * B[k][j]
                C[i][j] %= mod
    return C

κ±°λ“­μ œκ³± μ—°μ‚°ν•˜κΈ°

def matrixpow(M, N, mod):  # ν–‰λ ¬ κ±°λ“­μ œκ³± 계산 (M의 N승)
    n = len(M)
    result = [[1 if i == j else 0 for j in range(n)] for i in range(n)]  # λ‹¨μœ„ ν–‰λ ¬
    base = M
    
    while N:  # N이 0이 될 λ•ŒκΉŒμ§€ 반볡
        if N % 2 == 1:
            result = matrixmult(result, base, mod)
        base = matrixmult(base, base, mod)
        N //= 2

    return result
  1. n이 짝수일 λ•Œ
    스크란샷 2024-05-23 14 21 41
  2. n이 ν™€μˆ˜μΌ λ•Œ
스크란샷 2024-05-23 14 21 58

n이 짝수일 λ•ŒλŠ” M의 N/2μŠΉμ„ 두 번 κ³±ν•˜λ©΄ λ˜μ§€λ§Œ, n이 ν™€μˆ˜μΌ λ•ŒλŠ” M의 n-1 μŠΉμ„ κ΅¬ν•˜κ³  M을 μΆ”κ°€λ‘œ κ³±ν•΄μ€˜μ•Ό ν•œλ‹€.

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

result에 κ±°λ“­μ œκ³±ν–‰λ ¬μ„ μ €μž₯ν•΄μ•Ό μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€

Copy link
Collaborator

@yuyu0830 yuyu0830 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

행렬이 λ‹€μ–‘ν•œ 연산에 μ‚¬μš©λ  수 μžˆλ‹€λŠ” κ±Έ μ•Œκ²Œλœ λ¬Έμ œμ˜€μ£ .. 직접 식을 적어가며 μ™œ ν–‰λ ¬ 연산을 ν–ˆμ„ λ•Œ ν”Όλ³΄λ‚˜μΉ˜κ°€ λ‚˜μ˜€λŠ”μ§€ μ•Œμ•˜μ„ λ•ŒλŠ” μ§„μ§œ μ‹ κΈ°ν–ˆμ—ˆλ˜ 기얡이 μžˆμŠ΅λ‹ˆλ‹€ γ…Žγ…Ž
μ—¬λ‹΄μœΌλ‘œ % 2 연산을 ν•΄λ‚˜κ°ˆ λ•ŒλŠ” bitwise 연산을 ν†΅ν•΄μ„œ λ”μš± λΉ λ₯΄κ²Œ ν•  수 μžˆλ‹€λŠ” 것 μ•„μ‹œλ‚˜μš”? 파이썬이라 접근성은 λ–¨μ–΄μ§€κ² μ§€λ§Œ bit λ‹¨μœ„λ‘œ 사고λ₯Ό ν™•μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€!

@InSange InSange removed the request for review from dhlee777 June 28, 2024 02:00
Copy link
Collaborator

@InSange InSange left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ν–‰λ ¬ 문제λ₯Ό 풀이할 λ•Œ 제곱 μˆ˜λ§ŒνΌμ— 따라 계산을 ν•΄μ€¬λ˜κ²Œ 되게 골머리λ₯Ό μ©λŠ” 일이 λ§Žμ•„μ„œ ν”Όλ³΄λ‚˜μΉ˜λ„ 이것을 μ μš©ν•΄μ„œ 큰 수λ₯Ό ν’€μ–΄λ‚˜κ°ˆ 수 μžˆμ§€ μ•Šμ„κΉŒ μƒκ°ν–ˆλŠ”λ° κ·ΈλŒ€λ‘œ 행렬을 μ¨μ„œ 풀쀄은 생각 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 특히 μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” μˆ˜κ°€ 되게 큰데 λ©”λͺ¨λ¦¬κ°€ μ–΄λ–»κ²Œ λ‚˜μ˜€λŠ”μ§€ κΆκΈˆν•œλ° μ•Œλ €μ£Όμ‹€ 수 μžˆλ‚˜μš©?

@seongwon030
Copy link
Collaborator Author

ν–‰λ ¬ 문제λ₯Ό 풀이할 λ•Œ 제곱 μˆ˜λ§ŒνΌμ— 따라 계산을 ν•΄μ€¬λ˜κ²Œ 되게 골머리λ₯Ό μ©λŠ” 일이 λ§Žμ•„μ„œ ν”Όλ³΄λ‚˜μΉ˜λ„ 이것을 μ μš©ν•΄μ„œ 큰 수λ₯Ό ν’€μ–΄λ‚˜κ°ˆ 수 μžˆμ§€ μ•Šμ„κΉŒ μƒκ°ν–ˆλŠ”λ° κ·ΈλŒ€λ‘œ 행렬을 μ¨μ„œ 풀쀄은 생각 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 특히 μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” μˆ˜κ°€ 되게 큰데 λ©”λͺ¨λ¦¬κ°€ μ–΄λ–»κ²Œ λ‚˜μ˜€λŠ”μ§€ κΆκΈˆν•œλ° μ•Œλ €μ£Όμ‹€ 수 μžˆλ‚˜μš©?

스크란샷 2024-06-30 18 10 41

μ΄λ ‡κ²Œ λ‚˜μ™”μŠ΅λ‹ˆλ‹€!

@seongwon030 seongwon030 merged commit f5ca956 into main Jun 30, 2024
1 check passed
@seongwon030 seongwon030 deleted the 13-seongwon030 branch June 30, 2024 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants