สมมติว่าเรามีตัวเลขสี่ตัว 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)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ตอบ :=0
- สำหรับ x ในช่วง 1 ถึง c ให้ทำ
- l :=x*(x-a)
- det2 :=b*b - 4*l
- ถ้า det2 เหมือนกับ 0 และ b เป็นคู่และ 1 <=ชั้นของ (b/2) <=d แล้ว
- อัน :=ans + 1
- ติดตามตอนต่อไป
- ถ้า det2> 0 แล้ว
- det :=ส่วนจำนวนเต็มของรากที่สองของ det2
- ถ้า det^2 เหมือนกับ det2 และ (b+det) เป็นคู่ ดังนั้น
- ถ้า 1 <=ชั้นของ (b+det)/2 <=d แล้ว
- อัน :=ans + 1
- ถ้า 1 <=ชั้นของ (b-det)/2 <=d แล้ว
- อัน :=ans + 1
- ถ้า 1 <=ชั้นของ (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