[백준] 24503. blobfearful

newbieski·2022년 3월 8일
0

백준

목록 보기
123/210

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

문제요약

  • K가 주어짐(10^15), A가 주어짐(10^15)
  • A * X! 이 K의 배수가 되는 가장 작은 X 구하기
  • 공식해설

접근법

  • 팩토리얼 연산을 통해 K만 갖고 있는 것(소인수)을 채워야함
    • K 만 갖고 있는 것 : K / gcd(K, A)
    • 3 ^ 5을 K만 갖고 있다면, 3, 6, 9, 12 만에 채울 수 있음. 즉 3의 배수가 팩토리얼에 나타날때마다 채울 수 있는데 9(=3 * 3)와 같은 경우도 고려해보야함
    • 각각의 소수별로 따로 만족할 것이고, 그 중에 가장 큰 것을 구하면 될 것임
  • K / gcd(K, A) 소인수 분해를 매번해야하는가?
    • 처음에 여기서 막혔음
    • sqrt(10^15)까지의 소수를 미리 구하고(300만개 정도), 매번 소인수 분해를 하려고 했음 => 시간 복잡도 문제
    • 공식해설을 살짝 참고했고, 아이디어를 얻음
    • 어짜피 K의 소인수는 정해져있고, 이들만 소인수 분해에 이용하면 됨
  • K / gcd(K, A)에서 소인수들이 몇번 나타나는지 계산함
  • 나타난 소인수를 만족하기 위해서 어디까지 팩토리얼해야하는지 각각 계산함
  • 계산한 것 중에 최대가 구하고자 하는 값
profile
newbieski

0개의 댓글