극한의 gcd 합
시간 제한4초메모리 제한256 MB
n개 구간에서 각각 하나씩 고른 모든 튜플의 최대공약수를 합한 뒤 1,000,000,007로 나눈 나머지를 구합니다.
문제
정수 상수 의 값이 주어진다. 아래 코드를 끝까지 실행했을 때 sum에 최종적으로 어떤 값이 저장되는지 구하라.
sum = 0;
for (x1 = a1; x1 <= b1; x1++)
for (x2 = a2; x2 <= b2; x2++)
...
for (xn = an; xn <= bn; xn++)
sum = sum + gcd(x1, x2, ..., xn);
gcd는 인자로 받은 의 최대공약수를 돌려주는 함수이고, sum은 아무리 큰 정수라도 담는 변수다.
너무 쉬워 보이나요? 저도 그렇게 생각합니다.
입력
첫째 줄에 자연수 이 주어진다.
다음 개 줄 가운데 번째 줄에는 와 가 공백으로 구분되어 주어진다.
, 이다.
출력
C/C++에는 아무리 큰 정수라도 담는 자료형이 없으므로, sum의 값을 로 나눈 나머지를 한 줄에 출력한다.