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

因數

因數,又稱約數,是對於整數n,除m而"無餘數"的整數。
相對來說,稱n為該因數的倍數。
因數不限正負,可以用「因數倍數」或「倍數0 (mod 因數)」(參見同餘)來表達。
例如,(67=42)7是42的因數,寫作 742,亦是 420 (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; 
}
文章標籤
全站熱搜
創作者介紹
創作者 伊 的頭像

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

發表在 痞客邦 留言(0) 人氣(32,914)