gpt4 book ai didi

r - 计算R程序

转载 作者:行者123 更新时间:2023-12-04 22:50:36 24 4
gpt4 key购买 nike

我想计算可以被 1-20 中的所有自然数整除的最小可能数;我在 R 中编写了以下程序,但没有得到所需的输出(看来我的循环几乎永无止境)。

我的程序如下:

a = 21
c = 0
while ( c < 20){
c = 0
n = 1
while ( n < 21 ){
if (a%%n == 0) c = c + 1
n = n+1
}
a = a + 1
}
print (a)

我哪里做错了?

最佳答案

这是一个更像 R 的解决方案,它使用的事实是答案将是素数的乘积 p <= 20 ,每个素数都被提升到一个索引 i 使得 p^i <=20

sMult <- function(x)
# calculates smallest number that 1:x divides
{
v <- 1:x
require(gmp) # for isprime
primes <- v[as.logical(isprime(v))]
index <- floor(log(x)/log(primes))
prod(rep(primes,index))
}

其中产生:
> sMult(20)
[1] 232792560
> sMult(20)%%1:20
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

虽然这个解决方案是通用的,但应该注意的是,对于大的 xisprime 是概率性的。当然,当这可能会给出错误的结果时,您也可能有一个很大的数字,以至于无法准确存储。幸运的是 gmp 包实现了一个大整数类 bigz 。将此更改用于函数的最后一行:
prod(as.bigz(rep(primes,index)))

比较以下结果:
> sMult(1000)
[1] Inf
> sMult2(1000)
[1] "7128865274665093053166384155714272920668358861885893040452001991154324087581111499476444151913871586911717817019575256512980264067621009251465871004305131072686268143200196609974862745937188343705015434452523739745298963145674982128236956232823794011068809262317708861979540791247754558049326475737829923352751796735248042463638051137034331214781746850878453485678021888075373249921995672056932029099390891687487672697950931603520000"

关于r - 计算R程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com