4개의 숫자 a, b, c 및 d가 있고 쌍의 수(x, y)를 찾아야 하며 다음 방정식을 따르는 것을 찾을 수 있다고 가정합니다. x^2 + y^2 =(x*a) + ( y*b) 여기서 x는 [1, c] 범위에 있고 y는 [1, d] 범위에 있습니다.
따라서 입력이 a =2 b =3 c =2 d =4와 같으면 한 쌍이 (1, 1)이므로 출력은 1이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- ans :=0
- 1~c 범위의 x에 대해 다음을 수행합니다.
- l :=x*(x-a)
- det2 :=b*b - 4*l
- det2가 0과 같고 b가 짝수이고 1 <=floor of (b/2) <=d이면
- ans :=ans + 1
- 다음 반복으로 이동
- det2> 0이면
- det :=det2 제곱근의 정수 부분
- det^2가 det2와 같고 (b+det)가 짝수이면
- 1 <=floor of (b+det)/2 <=d이면
- ans :=ans + 1
- 1 <=(b-det)/2 <=d의 바닥이면
- ans :=ans + 1
- 1 <=floor of (b+det)/2 <=d이면
- 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(a, b, c, d): ans = 0 for x in range(1,c+1): l = x*(x-a) det2 = b*b - 4*l if det2 == 0 and b%2 == 0 and 1 <= b//2 <= d: ans += 1 continue if det2 > 0: det = int(round(det2**0.5)) if det*det == det2 and (b+det) % 2 == 0: if 1 <= (b+det)//2 <= d: ans += 1 if 1 <= (b-det)//2 <= d: ans += 1 return ans a = 2 b = 3 c = 2 d = 4 print(solve(a, b, c, d))
입력
2, 3, 2, 4
출력
1