【學習筆記】關於最大公約數(gcd)的定理
結論1
gcd(xa−1,xb−1)=xgcd(a,b)−1
證明:
採用數學歸納法。
令a=kb+p, 則有gcd(xa−1,xb−1)=gcd(xkb+p−1,xb−1)=gcd(xp(xkb−1)+xp−1,xb−1)=gcd(xp−1,xb−1)=gcd(xb−1,x(amodb)−1).
中間一步利用到了如下結論: (x−1)∣(xk−1), 證明直接因式分解: xk−1=(x−1)(∑i=0k−1xi)
結論2
gcd(Fib(a),Fib(b))=Fib(gcd(a,b))
其中Fib(x)為Fibonacci數列第x項。
證明:
首先證明一個結論: Fib(a+b)=Fib(a−1)Fib(b)+Fib(a)Fib(b+1)
採用數學歸納法: b=1,Fib(a+b)=Fib(a+1)=Fib(a)+Fib(a−1)=Fib(a−1)Fib(1)+Fib(a)Fib(2)
b=2,Fib(a+b)=Fib(a+2)=Fib(a+1)+Fib(a)=2Fib(a)+Fib(a−1)=Fib(a−1)Fib(2)+Fib(a)Fib(3)
對於更大的b, 假設有結論對b−1,b−2成立,則Fib(a+b)=Fib(a+b−1)+Fib(a+b−2)=Fib(a−1)Fib(b−1)+Fib(a)Fib(b)+Fib(a−1)Fib(b−2)+Fib(a)Fib(b−1)=Fib(a−1)(Fib(b−2)+Fib(b−1))+Fib(a)(Fib(b−1)+Fib(b))=Fib(a−1)Fib(b)+Fib(a)Fib(b+1)
因此假設成立。
然後考慮如何證明gcd: 首先gcd(Fib(n),Fib(n−1))=1 (數學歸納同樣可證),然後不妨設a>b, 依然可以數學歸納證明,假設上式對於a,b成立,則gcd(Fib(a+b),Fib(a))=gcd(Fib(a−1)Fib(b)+Fib(a)Fib(b+1),Fib(a))=gcd(Fib(a−1)Fib(b),Fib(a))=gcd(Fib(b),Fib(a))=Fib(gcd(a,b))=Fib(gcd(a+b,a)).
證畢。
推廣: 由於f(a+b)=f(a−1)f(b)+f(a)f(b+1)對多種能表示成f(n)=af(n−1)+bf(n−2),(gcd(a,b)=1)的遞推關係式都適用,因此對於此類關係式都有gcd(f(a),f(b))=f(gcd(a,b)).
相關推薦
【算法】最大公約數、最小公倍數、數學歸納法
數學題 div 邏輯 技術分享 同時 9.png 最大 常見 演繹法 最大公約數: 如果數a能被數b整除,a就叫做b的倍數,b就叫做a的約數。 幾個整數中公有的約數,叫做這幾個數的公約數;其中最大的一個,叫做這幾個數的最大公約數。 12、16的公約數有1、2、4,其中
【學習筆記】最小表示法
用途 給定一個長度為n,可旋轉的字串環,求從哪個位置斷開的長度為n的字串字典序最小/大(以最小為例,最大同理) 演算法描述 &nbs
【51Nod 1040】 最大公約數之和
Description Solution 分析題目可以發現,兩個數gcd(a,b)=x,則等價於gcd(ax,bx)=1,問題就可以轉化為滿足gcd(nx,ix)=1的i的個數,對答案貢獻就是個
【學習筆記】關於最大公約數(gcd)的定理
結論1 gcd(xa−1,xb−1)=xgcd(a,b)−1\gcd(x^a-1,x^b-1)=x^{\gcd(a,b)}-1gcd(xa−1,xb−1)=xgcd(a,b)−1 證明: 採用數學歸
【51NOD-0】1011 最大公約數GCD
style lose gif lap blog %d 51nod ret display 【算法】歐幾裏德算法 #include<cstdio> int gcd(int a,int b) {return b==0?a:gcd(b,a%b);} int mai
最大公約數GCD學習筆記
正整數 font 學習 nbsp pan -s ont 條件 最大公約數 引理 已知:k|a,k|b 求證:k|(m*a+n*b) 證明:∵ k|a ∴ 有p*k=a 同理可得q*k=b ∴ p*k*m=m*a,q*k*n=n*b ∴ k(p*m+q*n)=
【基礎】1011 最大公約數GCD
遞迴: #include<cstdio> int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } int main(){ long long a,b; scanf("%ld%ld",&a,
【洛谷P1029】最大公約數和最小公倍數問題
題目傳送門P1029 題目描述 輸入22個正整數x_0,y_0(2 \le x_0<100000,2 \le y_0<=1000000)x0,y0(2≤x0<100000,2≤y0<=1000000),求出滿足下列條件的P,QP,Q的個數
【機器學習筆記】最大似然估計法與LR中 J of theta 的概率解釋
看公開課的時候再次遇到,決心搞懂他… 首先是Andrew Ng在公開課中提到為什麼LR的損失函式要用最小二乘,給出了概率解釋,是在樣本誤差服從IID,並且誤差整體服從高斯分佈的最大似然函式的log表出。 最大似然估計法 先從一個比較普遍的例子講起:
Python程式碼筆記(1)輾轉相除法/歐幾里得演算法求最大公約數gcd(m,n)
歐幾里得演算法求最大公約數:輾轉相除法 具體做法:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除除數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,
【題解】最大公約數
++ mes closed pan long 題目 div click 一行 題目描述 Mirko剛學會了如何求兩個整數A和B的最大公約數。 由於A和B都非常大,所以我們不能直接給出,我們知道A是由N個正整數相乘得到的,我們也知道B是由M個正整數相乘得到的。 你的
【學習筆記】關於DOM4J:使用DOM4J解析XML文檔
文本 class 中產 獲取 ber exce int() logs hone 一、概述 DOM4J是一個易用的、開源的庫,用於XML、XPath和XSLT中。采用了Java集合框架並完全支持DOM、SAX、和JAXP。 DOM4J最大的特色是使用大量的接口,主要接口都在o
【學習筆記】Java中生成對象的5中方法
目標 獲得 cti com pre lan except 我們 highlight 概述:本文介紹以下java五種創建對象的方式: 1.用new語句創建對象,這是最常用的創建對象的方式。 2.使用Class類的newInstance方法 3.運用反射手段,調用java.la
【學習筆記】SIFT尺度不變特征 (配合UCF-CRCV課程視頻)
rri cnblogs -o mask 畫出 blocks http ucf 產生 SIFT尺度不變特征 D. Lowe. Distinctive image features from scale-invariant key points, IJCV 2004 -Lect
【學習筆記】String進階:StringBuffer類(線程安全)和StringBuilder類
n) static this util double 字符串 對象 ice 單線程 一、除了使用String類存儲字符串之外,還可以使用StringBuffer類存儲字符串。而且它是比String類更高效的存儲字符串的一種引用數據類型。 優點: 對字符串進行連接操作時,
【學習筆記】使用SQLyog連接MySQL數據庫
comm 丟失 school turn 復合主鍵 price not email pre 一、使用SQLyog創建數據庫用來管理學生信息 1 #創建數據庫student 2 DROP DATABASE IF EXISTS Myschool; 3 CREAT
【學習筆記】2017年7月18日MySQL測試:模擬QQ數據庫
關系 ref sts one database 等級 weight insert phone 模擬測試: QQ數據庫管理 一、創建數據庫並添加關系和測試數據 1 ##創建QQ數據庫,完成簡單的測試 2 3 #創建數據庫 4 DROP DATABASE IF EX
【學習筆記】C# 構造和析構
成員 int 學習 pri [] func 釋放內存 ring 銷毀 構造方法 構造方法是一個特殊的方法,負責初始化對象 構造方法名必須和類名一致 構造方法沒有返回值,但可以有參數,能夠重載 構造方法可以不寫,系統會自動為類添加一個無參的默認構造 如果將構造方法設置為P
【學習筆記】C# 靜態類
實例化 namespace [] line str 過程 ole test 數據 靜態修飾符 用static修飾的成員是靜態成員 靜態成員只能由類來調用 用static修飾的類是靜態類 靜態類不能實例化,只能包含靜態成員和const常量 在內存中一共有五個區域 1
【學習筆記】C# 接口
apple [] oat 訪問 names 使用 foo pub 修飾 使用interface關鍵字定義接口 接口定義一組成員但不直接實現它們 實現接口 實現接口的任何類都必須實現其所有的成員方法 接口不能直接實例化 接口可以包含方法和屬性聲明,不能包含字段 接口中所有