สมมุติว่าเรามีจำนวน n เราต้องตรวจสอบว่า n เป็นจำนวนเต็มกำลังสองหรือไม่ เลขกำลังสองสมบูรณ์ k สามารถแสดงเป็น k =a * a สำหรับจำนวนเต็ม a เราต้องแก้ปัญหานี้โดยไม่ต้องใช้ฟังก์ชันสแควร์รูทในตัว
ดังนั้น หากอินพุตเท่ากับ n =121 ผลลัพธ์จะเป็น True เพราะ 121 =11*11
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้า n เท่ากับ 0 หรือ n เหมือนกับ 1 แล้ว
-
คืนค่า True
-
-
เริ่มต้น :=2
-
หยุด :=ชั้นของ n / 2
-
ขณะที่เริ่ม <=หยุด ทำ
-
temp :=รายการตัวเลขทั้งหมดตั้งแต่ต้นจนจบ
-
k :=องค์ประกอบตรงกลางของอุณหภูมิ
-
k_squared :=k * k
-
ถ้า k_squared เหมือนกับ n แล้ว
-
คืนค่า True
-
-
ถ้า k_squared> n แล้ว
-
start :=temp[0]
-
หยุด :=k - 1
-
-
มิฉะนั้น
-
เริ่มต้น :=k + 1
-
หยุด :=องค์ประกอบสุดท้ายของอุณหภูมิ
-
-
-
คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
def solve(n): if n == 0 or n == 1: return True start = 2 stop = n // 2 while start <= stop: temp = range(start, stop + 1) k = temp[len(temp) // 2] k_squared = k * k if k_squared == n: return True if k_squared > n: start = temp[0] stop = k - 1 else: start = k + 1 stop = temp[-1] return False n = 121 print(solve(n))
อินพุต
121
ผลลัพธ์
True