กำหนด 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
- ลูป x จาก 1 ถึง c
- l := x*(x-a)
- det2 := b*b - 4*l
- ถ้า det2 == 0 และ b เป็นคู่ และ 1 <= b/2 <= d: ans += 1; continue
- ถ้า det2 > 0
- det := int(sqrt(det2))
- ถ้า det^2 == det2 และ (b+det) เป็นคู่
- ถ้า 1 <= (b+det)/2 <= d: ans += 1
- ถ้า 1 <= (b-det)/2 <= d: ans += 1
- คืนค่า ans
ตัวอย่างโค้ด
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))
Input
2, 3, 2, 4
Output
1