베주의 항등식 - 최대공약수로 만들 수 있는 정수
1. 문제
2. 풀이
예제를 보면 A,B의 최대공약수의 배수의 개수가 정답일 것 같은데
조금 수학적으로 생각해보면
A,B로 만들 수 있는 자연수가 X 이내에 몇개나 있느냐?라는 문제와 같은데
오른쪽으로 x번 A만큼 점프하면 Ax가 되고 왼쪽으로 y번 B만큼 점프하면 By가 되니까, 만들 수 있는 정수는
Ax+By형태와 같다.
이는 베주의 항등식 형태와 같으며,
"정수 x,y에 대하여 ax+by의 형태로 표현되는 모든 정수는 gcd(a,b)의 배수와 같다"
귀찮아서 증명하진 않았네..?
https://deepdata.tistory.com/577
따라서, a,b의 최대공약수를 구하고 x 이내에 최대공약수의 배수가 몇개나 있는지 구하면 된다.
1부터 x까지 c의 배수의 개수는 x//c라는건 알고 있겠지..?
from sys import stdin
def gcd(a,b):
while b != 0:
a,b = b,a%b
return a
T = int(stdin.readline())
for _ in range(T):
a,b,x = map(int,stdin.readline().split())
gcd_ab = gcd(a,b)
print(x//gcd_ab)
'정수론' 카테고리의 다른 글
1부터 n까지 모든 자연수들 각각의 약수의 누적합을 구하는 방법들(double counting, harmonic lemma, dynamic programming) (0) | 2023.06.15 |
---|---|
최대공약수의 약수는 모든 수들의 공약수이고 최소공배수의 배수는 모든 수들의 배수이다 (0) | 2023.05.28 |
피보나치 수열 심화과정5 -피보나치 수열의 합을 가장 빠르게 구하는 방법- (0) | 2023.05.27 |
피보나치 수열 심화과정4 -피보나치 수의 최대공약수 놀라운 성질- (0) | 2023.05.26 |
피보나치 수열 심화과정3 -모든 자연수는 피보나치 수의 합으로 유일하게 분해할 수 있다(제켄도르프의 정리)- (0) | 2023.05.23 |
TAGS.