2015年9月14日 星期一

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

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

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

設較大的數是a, 較小的數是b
$a^2-1111k=b^2, 1 \leq k \leq 7 $

因為
$32^2=1024 $
$46^2=2116, -1111=1005 $
$94^2=8836, +1111=9947 $
$99^2=9801 $
可知k不能大於7,
$46<a<99, 32<b<94 $

從 $a^2-1111k=b^2 $
$(a+b)(a-b)=101 \times11k $
可知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時
$a^2=3136 $
$b^2=2025 $
$a^2-b^2=1111=1111 \times1$, 符合題意和k的條件

a=67, b=34, k=3時
$a^2=4489 $
$b^2=1156 $
$a^2-b^2=3333=1111 \times3$, 符合題意和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))

沒有留言 :

張貼留言