Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Dec 25, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/8187

🧭 풀이 시간

90분

👀 체감 난이도

✏️ 문제 설명

정수 A의 어떤 약수 d에 대한 중복도 k는 다음과 같이 정의한다.

  • A%(d^k) == 0이고 A%(d^(k+1)) != 0인 k

N개의 수가 주어지고, 정수 A를 이 N개 수의 곱으로 가정한다.
A의 약수 d의 중복도가 k이고, A의 약수 중 중복도가 k보다 큰 수가 없다면 d를 신성한 약수로 정의한다.

A의 신성한 약수의 중복도와, 신성한 약수의 개수를 구해보자.

🔍 풀이 방법

A를 소인수분해하여 모든 소인수를 뽑아낸다.
신성한 약수의 중복도는 곧 A의 소인수 중 가장 큰 중복도와 동일하다.
가장 큰 중복도를 k라고 하고 중복도가 k인 서로 다른 소인수의 개수를 c라고 하면, c개 소인수들 중에서 아무거나 뽑아서 각각 k번씩 곱하여 만든 모든 수가 신성한 약수가 된다.
-> 2^c - 1개.

⏳ 회고

저 신성한 약수의 개수가 엄청 커질 수 있어서 C++에서는 큰 수 연산을 딱히 지원하지 않아서 틀림.
Java로 다시 짰는데 메모리 초과가 남.
결국 파이썬으로 고쳐서 풀었다

@oncsr oncsr self-assigned this Dec 25, 2025
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Dec 25, 2025
@ShinHeeEul ShinHeeEul merged commit 6e6058b into main Dec 25, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants