佩爾方程是一種不定二次方程。
下面的不定方程稱為佩爾(pell)方程:
x^2-d*y^2= 1 ........①
其中 d 為正整數,若 d 是完全平方數,則這個方程式只有平凡解(1,-1,0)。若 d 是非平方數。佩爾方程存在無窮多個解。
若佩爾方程的最小特解(最小正整數解)是(x1,y1),那麼可有迭代公式:
除了上述常見的佩爾方程,還有一種形式。下面的不定方程稱為第ii型佩爾(pell)方程:
x^2-d*y^2= -1 ........②
如果②有正整數解,設(a,b)是②的正整數解中使 x+y√d 最小的解(稱(a,b)為②的基本解),則②的全部正整數解可以表示為:
x+y√d=(a+b√d)^(2n+1) (n為任意正整數)
而且記x0+y0√d=(a+b√d)^2,則(x0,y0)為①的基本解。
關於公式②的通解,可以前往閱讀數論筆記 · 佩爾方程,該文章對此進行了詳細講解。這裡我們就直接拿來使用。
如上圖所示,當 k 為 -1 時,即和公式②一致,此時 p,q 為公式②的解,(r,s)為公式①的基本解。將公式①和公式②進行相乘,最終得到(x,y)的通解。假設 d 為 2,公式①的基本解為(3,2),則(x,y) = (3p±4q,2p±3q)。
案例一
記得有一次全班去唱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 呢?
分析:
根據題意列出方程2*m^2-2*m=n^2-n
,轉換為佩爾方程形式:(2*n-1)^2-2*(2*m-1)^2=-1
。
記 x = 2n-1,y=2m-1,原方程即為:x^2-2*y^2=-1
。為了求解該方程的通解,需要先計算x^2-2*y^2=1
的基本解,顯然(3,2)為基本解,套用上述得到的通解公式,可以得到 xn,yn 的迭代公式:
x(n+1) = 3xn±4yn
y(n+1) = 2xn±3yn
#由於題目解要求為正整數且 x(n+1) 大於 xn,(1,1)為方程基本解,因此選擇乘積相加,而非相減。
x(n+1) = 3xn+4yn
y(n+1) = 2xn+3yn
**實現:
n = 54
def cal_probability2():
global n
x = 1
y = 1
n = 0
xy_list =
while (x + 1) / 2 <= n:
a = x
b = y
if x>y:
n += 1
x = 3 * a + 4 * b
y = 2 * a + 3 * b
print(n)
print(xy_list)
輸出結果為:
2
[(4, 3), (21, 15)]
案例二
數1,3,6,10,....構成數列,數1,4,9,16,....構成數列。將既是數列中的項,又是數列中的項按照從小到大的順序
構成新的數列,試寫出數列的前4項。
分析:
數列的通項公式是 a_n = n(n+1)/2,數列的通項公式是 b_n = n^2。要找出兩個數列中的公共項,可以讓兩個通項公式相等。此時,令 a_n = b_m,即 n(n+1)/2 = m**2,因為不確定 m 和 n 是否完全相同,因此分開來區別表示。
由 n(n+1)/2 = m**2 可得 (2n+1)**2-8*m^2 = 1,令 x = 2n+1,y = m,則方程變為:x^2 - 8*y^2 = 1
,其中(3,1)為該方程的基本解。
**實現:
n = 4
n = 1
a = 3 #方程最小解(x1,y1)
b = 1
nm_list =
while n<=4:
x = a
y = b
a = 3*x+8*y
b = x+y*3
n += 1
print(nm_list)
result =
for w in nm_list:
b_n = w[1]**2
print(result)
輸出結果為:
[(1, 1), (8, 6), (49, 35), (288, 204)]
[1, 36, 1225, 41616]
後續會繼續更新相關知識點。 深入淺出學演算法008 求佩爾方程的解
4007 深入淺出學演算法008 求佩爾方程的解 time limit 1 sec memory limit 64 mb submit 3946 solved 1230 description 求關於x y的二次不定方程的解 x2 ny2 1 input 多組輸入資料,先輸入組數t 然後輸入正整數n...
貝塞爾例項
bezier and quadratic curves 1 quadraticcurveto cp1x,cp1y,x,y cpx,cpy表示控制點的座標,x,y表示終點座標 數學公式表示如下 二次方貝茲曲線的路徑由給定點p0 p1 p2的函式b t 追蹤 例項 1 doctype html 2 ht...
float例項講解
float是個強大的屬性,在實際前端開發過程中,人們經常拿它來進行布局,但有時,使用的不好,也麻煩多多啊。比如,現在我們要實現乙個兩列布局,左邊的列,寬度固定 右邊的列,寬度自動擴充套件。效果圖見下 思路 利用div float,div1為左邊的列,div2為右邊的列,將div1的寬度設定為固定寬度...