1. 程式人生 > >演算法(第4版) 學習筆記一——求最大公約數

演算法(第4版) 學習筆記一——求最大公約數

演算法是解決某種問題的方法,這種方法與程式語言無關。

要定義一個演算法,首先可以用自然語言將它描述出來,再將它轉成程式語言。

求最大公約數問題的自然語言演算法描述:

計算兩個非負整數p和q的最大公約數:若q是0,則最大公約數為p。否則,將p除以q得到餘數r,p和q的最大公約數即為q和r的最大公約數。

證明:

假設p比q大,那麼
p = kq + r………………(1)
k為p除以q得到的商,r為餘數,這裡的r不為0
假設p和q的其中一個公約數為x,那麼
p = mx………………(2)
q = nx………………(3)
將(2)和(3)代入(1),可得到
mx = knx + r

………………(4)
兩邊同除以x,得到
m = kn + r/x………………(5)
因為m、k和n都是正整數,所以r/x也是正整數。
換句話說,p和q的任意一個公約數都可以整除r,所以p、q、r的所有公約數相等,那麼最大公約數也相等,那麼求p和q的最大公約數就可以轉化為求q和r的最大公約數。

java語言描述

//此方法預設p>q
public static int gcd(int p, int q) {
    if(q==0) return p;
    int r = p % q;
    return gcd(q, r);
}

相關推薦

演算法4 學習筆記——大公約數

演算法是解決某種問題的方法,這種方法與程式語言無關。 要定義一個演算法,首先可以用自然語言將它描述出來,再將它轉成程式語言。 求最大公約數問題的自然語言演算法描述: 計算兩個非負整數p和q

演算法4 學習筆記二——二分查詢的普通實現與遞迴實現

以查詢某個特定元素在已排序陣列中的索引為例,且此陣列為從小到大排序。 演算法思路: 1、取第一個索引和最後一個索引代表兩個遊標,一個lo,一個hi 2、取lo和hi的中間值,即為mid,如下圖所示

JavaScript權威指南6學習筆記

未定義 顯示 註釋 星期 語句 布爾運算 垃圾 class ron 第2章 詞法結構 一、字符集 *JavaScript程序是用Unicode字符集編寫的。 *JavaScript嚴格區分大小寫。 *JavaScript註釋:(1)“//”用於單行註釋;(2)"/*

【算法4筆記

bsp .com 二維 一個數 數組 png 初始 算法 nbsp 1、在 Java 程序中創建一個數組需要三步: 聲明數組的名字和類型; 創建數組; 初始化數組元素。 2、典型的數組處理代碼。 3、起別名。

算法學習筆記——初級排序算法

space 倒序 優勢 name 算法 turn 資料 eply n) 時間復雜度(Time Complexity): 總運算次數表達式中受n的變化影響最大的那一項(不含系數)(註:若算法中語句執行次數為一個常數,則時間復雜度為O(1)) 若T(n)/f(n)求極限可得

JavaScript權威指南6學習筆記

設置 ray 每一個 main 需求 創建 per ive customer 第六章對象 對象可以看成其屬性的無序集合,每個屬性都是一個名/值對。JavaScript對象是動態的,可以新增也可以刪除屬性,可以通過引用而非值來操作對象。如果變量x是指向一個對象的引用,那麽執行

《 Spring 實戰 》4 讀書筆記

Pxx  表示在書的第 xx 頁。 Spring 框架的核心是 Spring 容器。 1. (P7.) 構造器注入是依賴注入的方式之一。 緊耦合:在 A 類的無參構造器中直接 new 出一個 B 類。 Spring 鬆耦合:在 A 類中使用有參構造器,把 B 類的超類型

ES6標準入門學習筆記(1)

  ES6宣告變數的六種方法   ES5只有兩種 var,function命令   ES6新增了let,const,class,import命令 驗證var與let用法上的不同 var a = []; for (var i = 0; i < 10; i++){

《影象處理、分析與機器視覺》4閱讀筆記——四章 影象分析的資料結構

4.1 影象資料表示的層次 共分為四個層次: 最底層的表示:圖示影象(iconic images),由含有原始資料的影象組成,原始資料也就是畫素亮度資料的整數矩陣。(預處理的部分) 第二層的表示:分割影象(segmented images)。 第三層:幾何表示(geo

演算法4——二分查詢

從今天開始使用CSDN記錄學習過程,先把之前看過的內容補上。 基本概念 首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前

《影象處理、分析與機器視覺》4閱讀筆記——六章 分割Ⅰ

分割是處理影象資料前最重要的步驟之一,其主要目標是將影象劃分為與其中含有的真實世界的物體或區域強相關性的組成部分。 分割方法根據所使用的主要特徵可劃分為三組:第一組是有關影象或部分的全域性知識(global knowledge),這一般由影象特徵的直方圖來表達。第二部分是基

python 基礎教程學習筆記

第十四章 網路程式設計 鑑於Python提供的網路工具眾多,這裡只能簡要地介紹它的網路功能。 本章首先概述Python標準庫中的一些網路模組。然後討論SocketServer和相關的類,並介紹 地介紹同時處理多個連線的各種方法。最後,簡單地說一說Twisted

《影象處理、分析與機器視覺》4閱讀筆記——五章 影象預處理

預處理不會增加影象的資訊量,一般會降低熵。因此,從資訊理論的角度看,最好的預處理是沒有預處理:避免(消除)預處理的最好途徑是著力於高質量的影象獲取。實際影象中的屬於一個物體的相鄰畫素通常具有相同的或類似的亮度值,因此如果一個失真了的畫素可以從影象中被挑出來,它也許就可以用其鄰接畫素的平均值來複原。

《影象處理、分析與機器視覺》4閱讀筆記——三章 影象及其數學與物理背景

3.1 概述 3.1.1 線性 向量(線性)空間(vector(linear) space) 3.1.2 狄拉克(Dirac)分佈和卷積 理想的衝擊是一個重要的輸入訊號,影象平面上的理想衝擊是用狄拉克分佈(Dirac distribution)定義的,。相當於訊號處理中的單位階躍函式

《影象處理、分析與機器視覺》4閱讀筆記——第二章 影象及其表達與性質

2.1 影象及其表達與性質 在單色影象中最低值對應於黑,而最高值對應於白。在他們之間的亮度值是灰階(gray-level) 空間解析度(spatial resolution)是由影象平面上影象取樣點間的接近程度確定的。 頻譜解析度(spectral resolution)是由感測器獲得的

演算法4》課後練習答案及相關問題解決方案

《演算法(第4版)》一書的程式碼和課後練習的答案我都分享到了我的GitHub上面,地址如下: https://github.com/jimmysuncpt/Algorithms 如果對您有幫助,覺得還不錯,麻煩賞個Star吧!您也可以貢獻您的程式碼,幫助

c++ primer學習筆記及習題答案程式碼第一章

筆記較為零散,都是自己不熟悉的知識點。 習題答案至於一個.cc中,需要執行某一題直接修改#define NUM**, 如執行第一題為#define NUM11,題1.24定義為NUM124chapter 1 1、std::cout << "Entertwo nu

JavaScript高階程式設計學習筆記JavaScript引用型別

1、引用型別 引用型別是指封裝了變數和對應函式的結構體,它是例項就是物件,類似於C++、Java中的類,但沒有類的介面等。 建立方式一: var obj = new Object();//new關鍵字 + 建構函式 obj.name = "noodles"

JavaScript高階程式設計學習筆記JavaScript使用

JavaScript設計初衷就是能在Web瀏覽器中直接執行的指令碼語言,當然迫切想知道它是怎麼使用的? Web瀏覽器上執行的內容就是上篇提到過HTML檔案,由XML衍生出來的超文字標記語言,由標籤和內容組成,為了能夠讓JavaScript更好的與HTML融合使

Visual C++.NET技術內幕6學習筆記1

ex06d:1.error C2664: “CreateFileW”: 不能將引數 1 從“const char *”轉換為“LPCWSTR” 解決方法: (1)改函式呼叫:VS中很多以前的函式直接輸入字串,現在改為_T("字串")了比如: pDC->TextOutW(