R中小于87的孪生素数
我试图列出前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
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]。这可能会加快你的搜索速度。