R中小于87的孪生素数

R中小于87的孪生素数,r,primes,R,Primes,我试图列出前87个孪生素数。我用的是埃拉托什尼方法。这是我到目前为止所做的工作 Eratosthenes <- function(n) { # Return all prime numbers up to n (based on the sieve of Eratosthenes) if (n >= 2) { sieve <- seq(2, n) # initialize sieve primes <- c() # initialize prime

我试图列出前87个孪生素数。我用的是埃拉托什尼方法。这是我到目前为止所做的工作

Eratosthenes <- function(n) {
  # Return all prime numbers up to n (based on the sieve of Eratosthenes)
  if (n >= 2) {
    sieve <- seq(2, n) # initialize sieve
    primes <- c() # initialize primes vector
    for (i in seq(2, n)) {
      if (any(sieve == i)) { # check if i is in the sieve
        primes <- c(primes, i) # if so, add i to primes
        sieve <- sieve[(sieve %% i) != 0] # remove multiples of i from sieve
      }
    }
    return(primes)
  } else {
    stop("Input value of n should be at least 2.")
  }
}

Era <- c(Eratosthenes(87))
i <- 2:86

for (i in Era){
  if (Era[i]+2 == Era[i+1]){
    print(c(Era[i], Era[i+1]))
  }
}
第二件事是在列表中缺少孪生素数,例如(29,31)

首先,(23,29)不是孪生素数

第二,你的答案可以在

编辑:我试过你们的代码,我发现纪元的长度是23

可能在运行
时,如果(Era[i]+2==Era[i+1])
,它会达到24并导致问题。

首先,(23,29)不是双素数

第二,你的答案可以在

编辑:我试过你们的代码,我发现纪元的长度是23

可能在运行
时,如果(Era[i]+2==Era[i+1])
,它会达到24并导致问题。

for(i in Era)
i
设置为
2
,然后设置为
3
,然后设置为
5
等等,这不是您想要的。将
用于(序列中的i(长度(纪元)-1))

for(i in Era)
i
设置为
2
,然后设置为
3
,然后设置为
5
等等,这不是您想要的。将
用于(序列中的i(长度(纪元)-1))


for
循环中,
i
不再是索引,而是
Era
中的元素。在这种情况下,您可以尝试使用%Era中的
(i+2)%i
来判断
i+2
是否为双胞胎

for (i in Era){
  if ((i+2) %in% Era){
    print(c(i,i+2))
  }
}

[1] 3 5
[1] 5 7
[1] 11 13
[1] 17 19
[1] 29 31
[1] 41 43
[1] 59 61
[1] 71 73
> print(cbind(i,j = i+2))
      i  j
[1,]  3  5
[2,]  5  7
[3,] 11 13
[4,] 17 19
[5,] 29 31
[6,] 41 43
[7,] 59 61
[8,] 71 73

更简单的方法可能是使用
diff
,例如

i <- Era[c(diff(Era)==2,FALSE)]
print(cbind(i,j = i+2))

for
循环中,
i
不再是索引,而是
Era
中的元素。在这种情况下,您可以尝试使用%Era中的
(i+2)%i
来判断
i+2
是否为双胞胎

for (i in Era){
  if ((i+2) %in% Era){
    print(c(i,i+2))
  }
}

[1] 3 5
[1] 5 7
[1] 11 13
[1] 17 19
[1] 29 31
[1] 41 43
[1] 59 61
[1] 71 73
> print(cbind(i,j = i+2))
      i  j
[1,]  3  5
[2,]  5  7
[3,] 11 13
[4,] 17 19
[5,] 29 31
[6,] 41 43
[7,] 59 61
[8,] 71 73

更简单的方法可能是使用
diff
,例如

i <- Era[c(diff(Era)==2,FALSE)]
print(cbind(i,j = i+2))

打印
i
对于每个迭代,我认为您会看到问题,并且您需要比
Era
的长度少做一次迭代,这会导致您的错误,除了[3,5]所有双素数对的形式都是[6n-1,6n+1]。这可能会加快您的搜索速度。打印
i
对于每次迭代,我认为您都会看到问题,而且您需要比
Era
的长度少进行一次迭代,这会导致您的错误除了[3,5]之外,所有双素数对的形式都是[6n-1,6n+1]。这可能会加快你的搜索速度。