民國100年經濟部事業招考題目

因數

因數,又稱約數,是對於整數n,除m而"無餘數"的整數。
相對來說,稱n為該因數的倍數。
因數不限正負,可以用「因數|倍數」或「倍數≡0 (mod 因數)」(參見同餘)來表達。
例如,(6×7=42)7是42的因數,寫作 7|42,亦是 42≡0 (mod 7)。
亦稱“因子”。一整數被另一整數整除,後者即是前者的因數,如1,2,4都為8的因數。

舉例:
18的因數:1,2,3,6,9,18
24的因數:1,2,3,4,6,8,12,24

公因數

在數學中,公約數,亦稱“公因數”。如果一個數同時是幾個數的約數,稱這個數為它們的“公約數”;公約數中最大的稱為最大公約數(最大公因數)。

舉例:
18跟24的公因數:1,2,3,6
18跟24的最大公因數:6,最大公因數 數學表示法:(18,24)=6

互質

兩個正整數只有一個公因數1時,它們的關係叫做互質。
舉例:
4的因數:1,2,4
9的因數:1,3,9
則4和9互質,(4,9)=1。

最大公因數的求法

1.短除法
最大公因數短除法1.jpg
(24,36,42)=2*3=6

2.標準分解式法
最大公因數標準分解式法1.jpg

3.輾轉相除法
GCDFig1.gif

舉例:x=42,y=75 求x,y最大公因數
1. 以較大的數(75)為被除數,較小的數(42)為除數,75 / 42 = 1 餘 33
2. 前一步驟的除數為被除數,餘數為除數,42 / 33 = 1 餘 9
3. 33 / 9 = 3 餘 6
4. 9 / 6 = 1 餘 3
5. 6 / 3 = 2 餘 0,除數 3 即可為最大公因數

由以上敘述可得遞迴function:(了解原理後,寫出程式就不是問題)

遞迴的寫法:

int gcd(int x,int y) {
    if (y == 0)  /* 餘 0,除數 x 即為最大公因數 */
        return x;
    else
        return gcd(y, x % y);  /* 前一步驟的除數為被除數,餘數為除數 */
}

 

#include "stdafx.h"
#include < stdio.h >
#include < cstdlib >

int gcd(int x,int y);

int _tmain(int argc, _TCHAR* argv[])
{
    int xin=42,yin=75;
    int x,y;
    if (xin < yin) {
        x=yin;
        y=xin;
    } else {
        x=xin;
        y=yin;
    }
    printf("GCD=%d \n", gcd(x,y) );
    system("pause");
	return 0;
}
int gcd(int x,int y) {
    if (y == 0)  /* 餘 0,除數 x 即為最大公因數 */
        return x;
    else
        return gcd(y, x % y);  /* 前一步驟的除數為被除數,餘數為除數 */
}

 

迴圈的寫法:

int gcd2(int x,int y) {
    int temp;
    while(y != 0) {	/* 餘 0,除數 x 即為最大公因數 */
        temp=x % y;
        x=y;		/* 前一步驟的除數為被除數 */
        y=temp;	    /* 餘數為除數 */
    }
    return x;
}

 

#include "stdafx.h"
#include < stdio.h >
#include < cstdlib >

int gcd2(int x,int y);

int _tmain(int argc, _TCHAR* argv[])
{
    int xin=42,yin=75;
    int x,y;
    if (xin < yin) {
        x=yin;
        y=xin;
    } else {
        x=xin;
        y=yin;
    }
    printf("GCD=%d \n", gcd2(x,y) );
    system("pause");
	return 0;
}
int gcd2(int x,int y) {
    int temp;
    while(y != 0) {	/* 餘 0,除數 x 即為最大公因數 */
        temp=x % y;
        x=y;		/* 前一步驟的除數為被除數 */
        y=temp;	    /* 餘數為除數 */
    }
    return x;
}

 

C++實做遞迴

#include < iostream > 
using namespace std; 

int gcd(int, int); 

int main() { 
    int m = 0;
    int n = 0; 

    cout << "輸入兩數:"; 
    cin >> m >> n; 

    cout << "GCD: " 
         << gcd(m, n) << endl; 

    return 0; 
} 

int gcd(int m, int n) { 
    if(n == 0) 
        return m; 
    else 
        return gcd(n, m % n); 
}

 

C++實做迴圈

#include < iostream > 
using namespace std; 

int gcd(int, int); 

int main() { 
    int m = 0;
    int n = 0; 

    cout << "輸入兩數:"; 
    cin >> m >> n; 

    cout << "GCD: " 
         << gcd(m, n) << endl; 

    return 0; 
} 

int gcd(int m, int n) { 
    int r = 0; 

    while(n != 0) { 
        r = m % n; 
        m = n; 
        n = r; 
    } 

    return m; 
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 伊 的頭像

    伊のspace~芳香精油*美容保養*程式設計

    伊 發表在 痞客邦 留言(0) 人氣()