0296 平分线和切线
* * * *
拉格朗日计划
* * * *
平分线和切线

给定边长为整数的三角形ABC,其中$BC\le AC\le AB$。

设$L_k$是角ACB的角平分线,$L_m$是ABC的外接圆在点C处的切线。$L_n$是过点B且平行于$L_m$的直线,并记$L_n$和$L_k$的交点为E。



有多少个这样的三角形周长不超过100000、且BE之长为整数?

本题难度:



解答

记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)