记CE与AB的交点为D,并记$\angle ECB=\alpha, \angle CBE=\beta$。
则由CE是角平分线可得$\angle ACE=\angle ECB=\alpha$,又由$L_m$平行于$L_n$可得BC与$L_m$的夹角也是$\beta$。
从而由同位角关系可得$\angle DEB$等于EC与$L_m$的夹角,即$\alpha+\beta$。
设外接圆的圆心是O,BE与外接圆的另一个交点是F,则$\angle BFC=\angle BAC$,因为两者都是弦BC的圆周角。
又由$L_m$是切线可知其OC垂直于$L_m$和$L_n$,从而可得$CF=CB$,进而可得$\angle BAC=\angle BFC=\angle CBF=\beta$。
而$\angle EDB$是三角形CAD的外角,因此$\angle EDB=\angle CAD+\angle ACD=\alpha+\beta=\angle DEB$,因此$BE=BD$。
记录BC、AC、AB的长度分别是a,b,c,则由角平分线定理可得$BD=ac/(a+b)$。
设$\gcd(a,b)=d$,则有$\gcd(a,a+b)=\gcd(a,b)=d$,若$d=1$,则c需要是a+b的倍数,这显然与$a+b>c$矛盾。
因此$d>1$,并有$a=du, b=dv$,其中$\gcd(u,v)=1$且c是$u+v$的严格小于d倍的倍数。
用Farey序列枚举互素的数对$u$和$u+v$就可统计$c$的数量,最终结果是$1137208419$。
r=0
d=1
c=min(2*d-1,100000-d*2)
while d<=c:
r+=c//2-(d-1)//2
d+=1
c=min(2*d-1, 100000-d*2)
print("initial stats completed,current result:",r)
i=0
tick=1000000
q=[(0,1,1,1)]
while q:
lu,lv,ru,rv=q.pop()
a=lu+ru
b=lv+rv
if a+4*b<=100000:
d=1
c1,c2=d*b,min(d*(a+b)-1, 100000-d*(a+b))
while c1<=c2:
r+=c2//(a+b)-(c1-1)//(a+b)
d+=1
c1,c2=d*b,min(d*(a+b)-1, 100000-d*(a+b))
q.append((lu,lv,a,b))
q.append((a,b,ru,rv))
i+=1
if i%tick==0:print(i//tick,"million completed,current result:",r)
print(r)
|