R语言,关于for 和if

Q1: 用for的
用定点循环去决定x=cos(x)的答案,初始值是0.5,要多少次循环才能得到的答案是精确到前2位数?
Q2:
孪生素数是一组素数(x,y), 像 y=x+2, 构造一个清单能显示所有低于1000^2 的孪生素数。

# Q1
x = 0.5
n = 0
while ( abs(x - cos(x)) > 0.01) {
    x = cos(x)
    n = n + 1
}

print(sprintf('%i, x=%.3f, cos(x)=%.3f', n, x, cos(x))


Q2,正好刚刚回答了另一个R的质数的问题(http://zhidao.baidu.com/question/571598738),借过来用一下。这个数比较大,要运行一段时间,别着急。

Eratosthenes <- function(n) {
   if (n>2) {
      sieve <- seq(2,n)
      primes <- c()
      for ( i in seq(2,n)) {
          if (any(sieve == i)) {       
              primes <- c ( primes, i)    
              sieve <- c ( sieve[(sieve %% i ) != 0 ], i) 
              if ((i-2) %in% sieve) {
                print(sprintf("%i, %i", (i-2), (i)))
              }
           }
       }
       return(primes)
     } else {
        print ("n > 2")
     }
}
primes = Eratosthenes(1000^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"
...

追问

Q1能用for loop吗,
Q2,if ((i-2) %in% sieve) { print(sprintf("%i, %i", (i-2), (i)))不明白这2行,能解释下吗

追答

Q1可以用for loop,但要加条件break,不如用while

Q2,如果(i-2)还在sieve里,说明i-2也是质数,所以i,i-2是一对孪生质数。把它们打印出来

温馨提示:答案为网友推荐,仅供参考
相似回答