R语言练习——欧拉计划之Smallest-multiple
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
R语言练习——欧拉计划之Smallest multiple 最小公倍数 2520是最小的能够被1到10整除的数。最小的能够被1到20整除的正数是多少? 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。 与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。 最小公倍数=两数的乘积/最大公约(因)数 求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。 自定义函数求两个数的最大公约数 #更相减损法 gcd_1 <- function(x,y){ m <- 0 while (x %% 2 == 0 & y %% 2 == 0) { x <- x/2 y <- y/2 m <- m+1 } n <- x-y while (y!=n) { if (y > x) { z <- x x <- y y <- z } n <- x-y x <- n } if(m!=0) n*m*2 else n } #验证 gcd_1(260,104) ## [1] 52 #辗转相除法 gcd_2 <-function(x,y){ if (y > x) { z <- x x <- y y <- z } while(x%%y!=0){ x <- x%%y if (y > x) { z <- x x <- y y <- z } } y } gcd_2(260,104) ## [1] 52 自定义函数求两个数的最小公倍数 lcm_2 <- function(x,y){ x*y/gcd_2(x,y) } 求多个数的最小公倍数 lcm <- function(x){ lcm_data <- x[1] for (i in 2:length(x)) { lcm_data <- lcm_2(lcm_data,x[i]) } lcm_data } data_lcm <- c(1:10) lcm_result <- lcm(data_lcm) cat("最小的能够被1到10整除的数为:", lcm_result,"\n") ## 最小的能够被1到10整除的数为: 2520 data_lcm <- c(1:20) lcm_result <- lcm(data_lcm) cat("最小的能够被1到20整除的数为:", lcm_result,"\n") ## 最小的能够被1到20整除的数为: 232792560 本文来源:https://www.wddqw.com/doc/df608d6df321dd36a32d7375a417866fb94ac047.html