Processing math: 100%

2015年9月14日 星期一

[數學] 四位平方數挑戰題

問題:一個四位數是完全平方數,它的每一位數都減去同樣的數,(如1111,2222)後,仍是四位數的完全平方數,這樣的四位數有那些呢? 
(出自台北縣立三和國民中學九十五學年度 「數學金頭腦 」團體賽試題)

以下是我的解題思路,我不知道這類題目有甚麼特別算法,只能逐步排除不合理的數:

設較大的數是a, 較小的數是b
a21111k=b2,1k7

因為
322=1024
462=2116,1111=1005
942=8836,+1111=9947
992=9801
可知k不能大於7,
46<a<99,32<b<94

a21111k=b2
(a+b)(ab)=101×11k
可知a+b或a-b的因數包含101, a-b不可能,
因為最大的a的可能值和最小的b的可能值相差不到100
合理假設a+b=101m, m是正整數, 由於a+b<200, 所以m=1
a+b=101
那麼
ab=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
a2b2=1111=1111×1, 符合題意和k的條件

a=67, b=34, k=3時
a2=4489
b2=1156
a2b2=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))

沒有留言 :

張貼留言