R语言练习——欧拉计划之Smallest-multiple

时间:2023-01-11 08:56:11 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
R语言练习——欧拉计划之Smallest multiple

最小公倍数

2520是最小的能够被110整除的数。最小的能够被120整除的正数是多少?

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数ab的最小公倍数记为[ab],同样的,abc的最小公倍数记为[abc],多个整数的最小公倍数也有同样的记号。 与最小公倍数相对应的概念是最大公约数,ab的最大公约数记为(ab)。关于最小公倍数与最大公约数,我们有这样的定理:(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("最小的能够被110整除的数为:", lcm_result,"\n") ## 最小的能够被110整除的数为: 2520

data_lcm <- c(1:20)

lcm_result <- lcm(data_lcm)

cat("最小的能够被120整除的数为:", lcm_result,"\n") ## 最小的能够被120整除的数为: 232792560


本文来源:https://www.wddqw.com/doc/df608d6df321dd36a32d7375a417866fb94ac047.html