GCD!

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 줄의 n과 k에 대해 gcd(n!, k)를 구한다. n이 10억까지 커질 수 있어 n!을 직접 계산할 수 없고, k의 어떤 소인수가 결과에 남는지 따져야 한다.
난이도

보통10점 중 7점

유형
정수론, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

두 자연수의 최대공약수(GCD)는 두 수를 모두 나머지 없이 나누는 가장 큰 자연수이다. 예를 들어 88과 1212의 최대공약수는 gcd⁡(8,12)=4\gcd(8, 12) = 4이다. 44가 88과 1212를 동시에 나누는 가장 큰 정수이기 때문이다. (88과 1212의 공약수는 1,2,41, 2, 4이다.)

자연수의 팩토리얼은 그 수 이하의 모든 양의 정수를 곱한 값이다. 예를 들어 55의 팩토리얼은 5!=1×2×3×4×5=1205! = 1 \times 2 \times 3 \times 4 \times 5 = 120이다. (단, 0!=10! = 1로 정의한다.)

두 수 nn과 kk가 주어질 때, n!n!과 kk의 최대공약수를 구하는 프로그램을 작성하시오. 예를 들어 n=3n = 3, k=10k = 10이면 gcd⁡(n!,k)=gcd⁡(3!,10)=gcd⁡(6,10)=2\gcd(n!, k) = \gcd(3!, 10) = \gcd(6, 10) = 2이다.

입력

입력은 여러 줄로 이루어진다. 각 줄에는 두 정수 nn과 kk가 공백으로 구분되어 하나씩 주어지며, 입력은 파일의 끝까지 계속된다. (0≤n≤1,000,000,0000 \le n \le 1{,}000{,}000{,}000, 1≤k≤1,000,000,0001 \le k \le 1{,}000{,}000{,}000)

출력

입력의 각 줄에 대해 n!n!과 kk의 최대공약수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    3 10
    10 240
    12 364
    100 2351
    629 163547
    
    예상 출력
    2
    240
    28
    1
    67