项目Euler 50,我的循环有什么问题?

时间:2013-08-02 00:31:34

标签: r algorithm loops

Project Euler #50

  

素数41,可以写成六个连续素数的总和:

     

41 = 2 + 3 + 5 + 7 + 11 + 13

     

这是连续素数的最长和,它加到了低于一百的素数。

     

连续素数低于一千的最长和,加上素数,包含21个项,等于953。

     

哪个素数低于一百万,可以写成最连续素数的总和?

这是我的代码:

SieveOfE <- function(n) {
    primes <- rep(TRUE, n)
    primes[1] <- FALSE
    last.prime <- 2
    while (last.prime <= sqrt(n)) {
        primes[seq.int(2*last.prime, n, last.prime)] <- FALSE
        last.prime <- last.prime + min(which(primes[(last.prime + 1) : n]))
    }
    which(primes)
}

primes <- SieveOfE(3940)
primes <- as.numeric(primes)

ans <- 0
length <- 0

for (i in 1:length(primes)) {
    for (j in length(primes):i) {
        if ((sum(primes[i:j]) %in% primes) && (j - i > length)) {
            length <- j - i
            ans <- sum(primes[i:j])
        }
    }
}

ans

即使我知道它在900000+范围内,我仍然会得到3821的答案。

0 个答案:

没有答案