(出自台北縣立三和國民中學九十五學年度 「數學金頭腦 」團體賽試題)
以下是我的解題思路,我不知道這類題目有甚麼特別算法,只能逐步排除不合理的數:
設較大的數是a, 較小的數是b
a2−1111k=b2,1≤k≤7
因為
322=1024
462=2116,−1111=1005
942=8836,+1111=9947
992=9801
可知k不能大於7,
46<a<99,32<b<94
從 a2−1111k=b2
(a+b)(a−b)=101×11k
可知a+b或a-b的因數包含101, a-b不可能,
因為最大的a的可能值和最小的b的可能值相差不到100
合理假設a+b=101m, m是正整數, 由於a+b<200, 所以m=1
a+b=101
那麼
a−b=11k
2a=101+11k
a是正整數, 所以k只能是單數
for k=1
a=56, b=45
for k=3
a=67, b=34
for k=5,
a=78, b=23
b低於b的最小可能值, 捨去
驗算
a=56, b=45, k=1時
a2=3136
b2=2025
a2−b2=1111=1111×1, 符合題意和k的條件
a=67, b=34, k=3時
a2=4489
b2=1156
a2−b2=3333=1111×3, 符合題意和k的條件
所以答案所求的四位數是3136或4489
然後我想用程式去解應該更快,這是我用Python34的演算結果:
[3136, 4489]
Code如下:
#A list contains all 4-digit squares lst=[i**2 for i in range(1,100) if i**2 in range(1000,10000)] #A empty list for appending answers ans=[] #calculate the difference between elements in lst for i in lst: if lst.index(i) < len(lst)-7: for j in lst[lst.index(i)+6:]: #Check if the difference equals to multiples of 1111 if (j-i)%1111 == 0: ans.append(j) print (sorted(ans))
沒有留言 :
張貼留言