前言
??此專欄為python與R語言對(duì)比學(xué)習(xí)的文章;以通俗易懂的小實(shí)驗(yàn),帶領(lǐng)大家深入淺出的理解兩種語言的基本語法,并用以實(shí)際場景!感謝大家的關(guān)注,希望對(duì)大家有所幫助。
??“博觀而約取,厚積而薄發(fā)!”謹(jǐn)以此言,望諸君共勉
??本文針對(duì)數(shù)學(xué)問題“最大公約數(shù)、最小公倍數(shù)”進(jìn)行講解。具體的項(xiàng)目介紹見下文。
1、 最大公約數(shù)
1.1 約數(shù)
??在講述最大公約數(shù)之前我們先來認(rèn)識(shí)一下什么是約數(shù)。約數(shù)(又稱因數(shù)),整數(shù)a除以整數(shù)b(b≠0) 除得的商正好是整數(shù)而沒有余數(shù),我們就說a能被b整除,或b能整除a。a稱為b的倍數(shù),b稱為a的約數(shù)。因此不能孤立地說某個(gè)整數(shù)是約數(shù)。
??如:
4
=
1
?
4
=
2
?
2
【則稱
4
、
2
、
1
是
4
的約數(shù)】
4=1*4=2*2 【則稱4、2、1是4的約數(shù)】
4=1?4=2?2【則稱4、2、1是4的約數(shù)】
????
6
=
1
?
6
=
2
?
3
【則稱
6
、
3
、
2
、
1
是
6
的約數(shù)】
6=1*6=2*3 【則稱6、3、2、1是6的約數(shù)】
6=1?6=2?3【則稱6、3、2、1是6的約數(shù)】
????
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..................
..................
????注:一個(gè)數(shù)的約數(shù)必然包括1及其本身。
1.2 最大公約數(shù)
??如上展示的例子中,如果一個(gè)數(shù)c既是數(shù)a的約數(shù),又是數(shù)b的約數(shù),那么c叫做a與b的公約數(shù)。兩個(gè)數(shù)的公因數(shù)中最大的一個(gè),叫做這兩個(gè)數(shù)的最大公約數(shù)。
??如:
在上面的例子中,
4
和
6
的公約數(shù)有:
1
、
2
。
在上面的例子中,4和6的公約數(shù)有:1、2。
在上面的例子中,4和6的公約數(shù)有:1、2。
??????????? ? ?
4
和
6
的最大公約數(shù)是
2
。
4和6的最大公約數(shù)是2。
4和6的最大公約數(shù)是2。
1.3 求解方法
??在知道約數(shù)及最大公約數(shù)的基本概念之后,我們進(jìn)行求解,找出任意兩個(gè)數(shù)的最大公約數(shù):(此處展示常用的兩種解法)
例: 求解 12 和 18 的最大公約數(shù)。
??枚舉法:
12
的約數(shù)有
12
、
6
、
4
、
3
、
2
、
1
12的約數(shù)有 12、6、4、3、2、1
12的約數(shù)有12、6、4、3、2、1
??????
18
的約數(shù)有
18
、
9
、
6
、
3
、
2
、
1
18的約數(shù)有 18、9、6、3、2、1
18的約數(shù)有18、9、6、3、2、1
??????
所以
18
和
12
的最大約數(shù)是
6
所以18和12的最大約數(shù)是6
所以18和12的最大約數(shù)是6
??短除法: 短除符號(hào)就像一個(gè)倒過來的除號(hào),短除法就是先寫出要求最大公因數(shù)的兩個(gè)數(shù)A、B,再畫一個(gè)短除號(hào),接著在原本寫除數(shù)的位置寫兩個(gè)數(shù)公有的質(zhì)因數(shù)Z(通常從最小的質(zhì)數(shù)開始),然后在短除號(hào)的下方寫出這兩個(gè)數(shù)被Z整除的商a,b,對(duì)a,b重復(fù)以上步驟,以此類推,直到最后的商互質(zhì)為止,再把所有的除數(shù)相乘,其積即為A,B的最大公因數(shù)。
??程序求解: 采取短除法的逆向思維,短除法從最小的公質(zhì)數(shù)開始,此法能快速找到除了1的最小公約數(shù),反其道而行,如若我們重較小數(shù)開始遞減,滿足能同時(shí)被 x y 整除;則該數(shù)就是最大公約數(shù)。
2、 最小公倍數(shù)
2.1 倍數(shù)
??一個(gè)整數(shù)能夠被另一個(gè)整數(shù)整除,那么這個(gè)整數(shù)就是另一整數(shù)的倍數(shù)。與約數(shù)不同的是,一個(gè)數(shù)可以有無數(shù)個(gè)倍數(shù),而約數(shù)是有限的,因此無法通過枚舉法完全展示出一個(gè)數(shù)的倍數(shù)。
??如:
15
/
5
=
3
【則稱
15
是
5
的
3
倍、或
15
是
3
的
5
倍】
15 / 5 = 3 【則稱15是5的3倍、或15是3的5倍】
15/5=3【則稱15是5的3倍、或15是3的5倍】
2.2 最小公倍數(shù)
??兩個(gè)或多個(gè)整數(shù)公有的倍數(shù)叫做它們的公倍數(shù)。倍數(shù)可以有無數(shù)多個(gè),也可以無限大,因此多個(gè)整數(shù)之間只有最小公倍數(shù)。
??如:
12
的倍數(shù)有
0
、
12
、
24
、
36
、
48
、
60
、
72......
12的倍數(shù)有 0、12、24、36、48、60、72......
12的倍數(shù)有0、12、24、36、48、60、72......
????
18
的倍數(shù)有
0
、
18
、
36
、
54
、
72
、
90
、
108......
18的倍數(shù)有 0、18、36、54、72、90、108......
18的倍數(shù)有0、18、36、54、72、90、108......
????
則稱
12
和
18
的最小公倍數(shù)為
36
則稱 12 和18的最小公倍數(shù)為36
則稱12和18的最小公倍數(shù)為36
2.3 求解方法
??在知道倍數(shù)及最小公倍數(shù)的基本概念之后,我們進(jìn)行求解,找出任意兩個(gè)數(shù)的最小公倍數(shù):(此處展示常用的兩種解法)任然是求12和18的最小公倍數(shù)。
??短除法: 與上面一樣的算法,只是在最后的結(jié)果時(shí)把所有的除數(shù)和余數(shù)相乘。
??公式法: 所謂公式法(最大公約數(shù)與最小公倍數(shù)關(guān)系)就是對(duì)于任意兩個(gè)自然數(shù)
a
、
b
a、b
a、b,只要先求出這兩個(gè)數(shù)的最大公約數(shù)后,利用公式
[
a
,
b
]
?
(
a
,
b
)
=
a
?
b
[a,b] *(a,b) =a*b
[a,b]?(a,b)=a?b即可求出最小公倍數(shù)
[
a
,
b
]
=
a
?
b
/
(
a
,
b
)
[a,b]=a*b/(a,b)
[a,b]=a?b/(a,b) ,也即是兩個(gè)數(shù)的最小公倍數(shù)等于這兩個(gè)數(shù)的乘積除以這兩個(gè)數(shù)的最大公約數(shù)。這里可以取兩個(gè)質(zhì)數(shù)進(jìn)行驗(yàn)證
3
和
5
的最大公約數(shù)為
1
則有最小公倍數(shù)
=
3
?
5
/
1
=
15
3和5的最大公約數(shù)為1 則有最小公倍數(shù)=3*5/1=15
3和5的最大公約數(shù)為1則有最小公倍數(shù)=3?5/1=15
3、程序?qū)崿F(xiàn)
程序僅展示公式法求最小公倍數(shù)
3.1 python 代碼實(shí)現(xiàn)
x = int(input('x = '))
y = int(input('y = '))
# 如果 x 大于 y 就交換 x y 的值
if x > y:
trmp = y
y = x
x = temp
# 從兩個(gè)數(shù)中較小的數(shù)開始做遞減循環(huán)
for fac in range(x,0,-1):
if x % fac == 0 and y % fac == 0 :
print('{}和{}的最大公約數(shù)是:{}'.format(x,y,fac))
print('{}和{}的最小公倍數(shù)是:{}'.format(x,y,x*y//fac))
break
3.2 R語言代碼實(shí)現(xiàn)
math_diy <- function(){
x <- as.integer(readline("X = "))
y <- as.integer(readline("y = "))
if(x > y){
temp <- x
x <- y
y <- temp
}
for (i in x:-1) {
if((x %% i== 0 & y %% i == 0)){
cat("最大公約數(shù)為:",i)
cat("\n最小公倍數(shù)為:",x*y%/%i)
break
}
}
}
test_5 <- function(){
print("請(qǐng)輸入需要計(jì)算的數(shù)值")
math_diy()
}
test_5()
小結(jié)
??本次仍然是對(duì)條件、循環(huán)、及自定函數(shù)的混合使用;
??R語言看起來比較復(fù)雜,無非是都嵌套在了自定函數(shù)里,如有問題,可以私信哦!
??任何問題只要了解了本質(zhì),都能通過代碼實(shí)現(xiàn);大家可以自己練習(xí)一下。
??這是左手Python右手R系列的第3片文章,希望大家能喜歡這個(gè)系列。文章來源:http://www.zghlxwxcb.cn/news/detail-419905.html
創(chuàng)作不易,都瀏覽到這兒了,看官可否將下面的收藏點(diǎn)贊幫忙點(diǎn)亮。
文章來源地址http://www.zghlxwxcb.cn/news/detail-419905.html
到了這里,關(guān)于左手Python 右手R —— 最大公約數(shù)和最小公倍數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!