设,则容易验证P点坐标是。
显然,若三个三角形相似,则还有。
此时有两种情况,以及。
先考虑的情况,此时有,从而三角都是等腰三角形,且。
因而有以及,进而可得,显然b就不能是整数,因此不合要求。
接下来考虑的情况,此时有
其中第一个等号可推得
再考虑三角形DPB,它与三角形PAB相似的情况有两种,
联立可知前者推得PC=AP,即,后者推得,即。\
时有
显然此时a是偶数,因此枚举偶平数及其约数即可得到这一情况的所有接。
而时则有,不难看出需要是有理数,设,其中是互素的正整数,则有
由于互素,因此与也互素,从而需要是a的约数,且需要是完全平方数。
在实现中通过a来枚举是很低效的,反之应当考虑能写成的(偶)平方数,则需要枚举的的与上文时需要枚举的约数完全相同,再取的倍数作为即可。
最终结果是。
注:本题的上界很大,直接用筛法找出约数在空间上是不可取的,以下直接使用Sympy的divisor函数计算约数,也因此代码为Python 3,此外,代码中打印了进度信息。
from sympy import divisors
bound=100000000
n=bound
r1=r2=0
for a in range(2,n+1,2):
for u in divisors(a*a
v=a*a
if (u+v+2*a) < bound:
r1+=1
if u <= v and 2*(u+v+a) < bound:
r2+=1
if a%1000000==0:print(a
print(r1+r2)
|