1. 程式人生 > >C語言第七篇:輾轉相除法求最大公約數

C語言第七篇:輾轉相除法求最大公約數

一、演算法的基本概念

1、什麼是演算法?

為解決問題而採取的方法和步驟。

演算法是由一系列規則組成的過程,這些規則確定了一個操作的順序,以便能在有限步驟內得到特定問題的解。

2、演算法重要嗎?

“程式=演算法+資料結構”——N.Wirth

3、演算法的描述工具

  • (1)自然語言
  • (2)流程圖:程式流程圖,N-S圖
  • (3)虛擬碼

二、最大公約數——輾轉相除法

演算法:


原始碼:

/*
*Copyright (c)2016,劉兵馬俑
*All rights reserved.
*檔名稱:main.c
*作    者:劉兵馬俑
*完成日期:2016/03/24
*版 本 號:v1.0
*問題描述:輾轉相除法求兩個非負整數的最大公約數
*程式輸出:最大公約數
*/
#include <stdio.h>

int main()
{
    int a,b,r;
    printf("請輸入兩個正整數:\n");
    scanf("%d %d",&a,&b);
    //如果a<b,交換a和b的值
    if(a<b)
    {
        r=a;
        a=b;
        b=r;
    }

    //輾轉相除法,因為r的初始值不為0,所以while語句至少會執行一次
    //直至餘數為零,跳出迴圈
    while(r!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }

    //輸出最大公約數
    printf("最大公約數為:%d\n",a);

    return 0;
}

執行結果


相關推薦

C語言輾轉除法大公約數

一、演算法的基本概念 1、什麼是演算法? 為解決問題而採取的方法和步驟。 演算法是由一系列規則組成的過程,這些規則確定了一個操作的順序,以便能在有限步驟內得到特定問題的解。 2、演算法重要嗎

C語言輾轉除法大公約數 小公倍數

// dizhi.cpp : 定義控制檯應用程式的入口點。 //   #include "stdafx.h" #include <stdio.h> int CommonDivisor(int x, int y);//最大公約數 int CommonMultiple(in

C#輾轉除法大公約數小公倍數

class Program { static void Main(string[] args) { int num1, num2,

輾轉除法大公約數 php

輾轉相除法<?php /* 輾轉相除法過程 兩數相除取余數,判斷余數是否為零, 為零,則除數為當前最大公約數, 不為零,則當前除數變作被除數,余數變作除數, 再相除取余,再判斷,直到余數為零。 12 8 12%8 余 4 8%4 余 0 4為最大公約數。 */ $m = isset(

輾轉除法大公約數小公倍數

最大公約數(遞迴): int gcd(int a,int b){ if(a%b) return gcd(b,a%b); return b; } 最小公約數(迴圈): int gcd(int a,int b){ int temp; while(b>0){ te

輾轉除法大公約數

輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最

輾轉除法大公約數小公倍數

程式碼如下: #include<iostream> using namespace std; void divisio_algorithm(int x,int y) { int m = x, n = y, c, t; //m是較大數,n

SDUST OJ輾轉除法大公約數小公倍數

題目在介紹裡面已經透露了很大一部分資訊,所以只要動一丟丟腦筋就可以啦,讓我們來看一下程式碼吧: #include <stdio.h> int gcd(int a,int b) { return b? gcd(b,a%b) : a; } int lcm(int a,int

詳解輾轉除法大公約數,及原理

還是老規矩直接講解原理 輾轉相除法 優點是可以求出兩個大數的最大公因數 如果我們要求8251與6105的最大公因數的話假設8251是這個數x的a倍,再假設6105是x的b倍那麼2146=8251-61

輾轉除法——大公約數

一、題目描述     在一個由1×1的格子組成的平面上,給出兩個格子的交點P1(x1,y1)和P2(x2,y2).要求計算出線段P1P2上還有多少格子交點。          二、樣例     輸入:P1=(1,11),P2=(5,3)     輸出:3{(2,9),(3

我終於頓悟輾轉除法大公約數的原理了

假設有兩個數x和y,存在一個最大公約數z=(x,y),即x和y都有公因數z, 那麼x一定能被z整除,y也一定能被z整除,所以x和y的線性組合mx±ny也一定能被z整除。(m和n可取任意整數) 對於輾轉相除法來說,思路就是:若x>y,設x/y=n餘c,則x能表示成x=ny+c的形式,將ny移到左邊就是x

輾轉除法大公約數------一行代碼

pre 出現 col 如果 一行 多說 老師 百度 nbsp 今天學到一行代碼,感覺好牛逼--------當然是老師上課講的. 輾轉相除法是求最大公約數最好的方式了吧! 輾轉相除法原理我也不想多說,百度一下就可以了(基本就是用大數與小數取余,再用比余數大一點的數與余數取

輾轉大公約數小公倍數

scanf ret include %d 溢出 main sca 約數 stdio.h #include<stdio.h> int gcd(int a,int b) { if(b!=0) gcd(b,a%b); else return a; } int

輾轉除法--

除法 輾轉相除法 操作 spa sub gcd 遞歸 col strong 基本操作:設a<b,a÷b=q...r1 若r1=0,則最大公約數為r1 若r1!=0,則b÷r1=q...r2 r1÷r2=q...r3 直到rn為0為止 示例:280 380 280÷

輾轉除法計算大公因數的演算法編寫規則

輾轉相除法計算最大公因數並不是一個困難的演算法,但正因為它的簡單,在實際編寫中反而更容易產生困惑,讓我們來看下面幾段輾轉相除法的實現程式碼。 int gcd(int a, int b) { return a?gcd(b%a,a):b; } int gc

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

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

除法大公約數(轉自演算法設計與分析三版)

#include<stdio.h> int main() {     /*短除法求最大公約數*/     int i;     int j;     int a;     int b;     int t;     int c=1;     scanf("%d%

R語言學習 列表

方法 靈活的數據類型 引號 bounds 參考 最大的 post 長度 索引操作 列表(List)是R中最復雜的數據類型,一般來說,列表是數據對象的有序集合,但是,列表的各個元素(item)的數據類型可以不同,每個元素的長度可以不同,是R中最靈活的數據類型。列表項可以是列表

C語言大公約數的兩種方法輾轉除法和更減損術

輾轉相除法:        輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如

Python 語言學習 函式1(定義、呼叫和變數的作用域)

函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果