主要參考下面兩篇論文
原有題目意思是
記得有一次全班去唱K, 其中有個活動是情歌對唱. 具體操作流程是這樣的: 準備好 21 個鬮(我們班 15 男 6 女), 其中只有兩個是有標記的, 每人隨意抓取一個, 最後取到有標記的鬮的兩個人去點首情歌對唱. 旁邊一哥們兒幽幽地對我說, 看來攪基真是神的安排啊, 你看我們班的男女人數, 攪基的機率 C(15,2)/C(21,2) 剛好是 1/2. 給跪了, 這哥們兒對數字太敏感了, 簡直是拉馬努金轉世啊. 不過我隨之想到一個問題: (21, 15) 真的是神的唯一安排嗎? 其實不是的, 神還有很多類似的安排. 比如 (4, 3), 顯然 C(4,2)/C(3,2) 也等於 1/2, 當然還有 (120, 85) 等等等等. 神的安排太多太多了, 如果我們定義 (n, m) 是一個安排(其中 1 < m < n), 而如果 C(m,2)/C(n,2) = 1/2, 它就是神的安排. 現在的問題是, 給你一個不大於 10^9 的正整數 N, 有多少組神的安排 (n, m) 滿足 n <= N 呢?
解題思路:
對C(m,2)/C(n,2) = 1/2 進行化簡得到的為n(n-1) = 2m(m-1),求出n<=N的整數解的個數。
將方程兩邊同時乘以4得到:4n(n-1) = 8m(m-1),將其配方得到:(2n-1)2 =2(2m-1)2-1,令X=2n-1,Y=2m-1
則得到方程:X2-2Y2=-1 滿足佩爾方程:x2-Dy2=Q,根據上面兩篇論文,可以知道不定方程的解為
X+Y√2 = ±(1+√2)2n+1,n = 0,±1,±2,±3,………
方程X2-2Y2=-1 滿足x > 1,y>1的整數解可以用遞推公式表示即
x1=7,y1=5,
xk+1=2xk+4yk, 其中k=1,2,3............
yk+1=2xk+3yk
注意最後要去掉(1,1)及所有的偶數解(因為X=2n-1,Y=2m-1,X,Y必須是奇數)
python版的原始碼為:
N=100 cnt = 0 x,y=1,1 while x<= 2*N-1: x,y=3*x+4*y,2*x+3*y if x > 2*N-1: break if x%2 and y%2: cnt +=1 print cnt