1.暴力枚舉
給定一個正整數n,請找出所有滿足a2 + b2 = n的整數對(a, b),其中a和b都是正整數,且a ≤ b。
輸入格式:一個正整數n (1 ≤ n ≤ 10?)
輸出格式:所有符合條件的(a, b)對,每行一對,按a的升序排列。如果沒有符合條件的對,輸出"No solution"。
問題分析:我們需要找到所有滿足a2 + b2 = n的正整數對(a, b),其中a ≤ b。
枚舉策略:由于a和b都是正整數且a ≤ b,a的最大可能值是√(n/2),因為如果a > √(n/2),那么a2 > n/2,b2 = n - a2 < n/2 < a2,這將導致b < a,與a ≤ b矛盾。
算法選擇:采用枚舉算法,遍歷a的所有可能取值,對于每個a,計算b2 = n - a2,然后檢查b是否為整數。
優化:在枚舉a時,只需要枚舉到√(n/2)即可,減少不必要的計算。
import mathdef find_num(n):result=[]max_a=math.isqrt(n//2) #計算n//2的整數平方根for a in range(1,max_a+1):remainder=n-a*ab=math.isqrt(remainder)if b*b==remainder and b>=a:result.append((a,b))return resultn=int(input("請輸入一個整數:"))
pairs=find_num(n)if not pairs:print("No solution")
else:for a,b in pairs:print(a,b)
input()