该文的第3.2和3.4节给出了平铺数量的计算公式。
根据其中的推论3.4和定理3.5可知,当且仅当存在满足以下条件的自然数k时边长为a,b的房间无法铺满榻榻米。
$$(a+1)k+2\le b\le(a-1)(k+1)-2.$$
枚举a,k并统计b的数量,最终结果是85765680。
注:计算量较大,代码中打印了进度信息。
import math
target=100000000
d=[0]*(target+1)
for a in range(1,int(math.sqrt(target))+1):
for k in range(1,target/(a*a+a)+1):
for b in range((a+1)*k+2,(a-1)*(k+1)-1):
if a*b<=100000000 and (a*b)%2==0:
d[a*b]+=1
if a%100==0:print a/100,"percent completed"
n=1
while d[n]!=200:
n+=1
print n
|