아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

약수 계산

시간 제한2초메모리 제한512 MB

요약
주어진 수들에서 최대공약수가 정확히 K가 되는 가장 큰 부분집합의 크기를 각 질의마다 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
수학, 정수론, 누적 합
정답자
아직 제출이 없습니다

문제

경아는 NN(1≤N≤3⋅1051 \le N \le 3 \cdot 10^5 )개의 수를 이용해서 최대 공약수를 계산하는 놀이를 하고 있다. 경아가 가지고 있는 수는 모두 11 이상 10610^6 이하의 정수이다.

경아가 하는 놀이의 진행 방식은 다음과 같다.

  • 임의의 수 KK(1≤K≤106 1 \le K \le 10^6)를 선택한다.
  • 가지고 있는 수 중에서 일부를 골라 고른 수의 최대 공약수가 KK가 되게끔 만든다. 이 때, 수는 최대한 많이 골라야 한다. 수를 하나만 고른 경우 최대공약수는 그 수와 같은 걸로 생각한다.

경아는 이 놀이를 한참 하다가 피곤해졌다. 경아가 선택한 QQ(1≤Q≤3⋅1051 \le Q \le 3 \cdot 10^5)개의 수가 주어졌을 때 대신 답을 계산해주는 프로그램을 작성해보자.

입력

첫째 줄에 경아가 가지고 있는 수의 개수 NN (1≤N≤3⋅1051 \le N \le 3 \cdot 10^5)이 주어진다.

둘째 줄에 경아가 가지고 있는 NN개의 수 목록이 공백으로 구분되어 주어진다. 각 수는 11 이상 10610^6 이하의 정수이다.

셋째 줄에 경아가 선택한 수의 개수 QQ (1≤Q≤3⋅105 1 \le Q \le 3 \cdot 10^5)가 주어진다.

넷째 줄부터 QQ줄에 걸쳐 경아가 선택한 수 KK가 한 줄에 하나씩 주어진다. 각 수는 11 이상 10610^6 이하의 정수이다.

출력

QQ줄에 걸쳐, 가지고 있는 수에서 최대공약수가 KK가 되게끔 가능한 한 많은 수를 골랐을 때 고를 수 있는 수의 개수를 출력한다. 만약 어떻게 골라도 최대 공약수가 KK가 되게 만들 수 없다면 대신 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    5
    2 6 10 3 8
    5
    1
    2
    3
    4
    6
    
    예상 출력
    5
    4
    2
    -1
    1