这算法开始用2个值,x1 & x2 是f(x1) & f(x2) 的相反值。如果f(x)是连续性,那就会有根在这2值之间。用来判断f(x)的中点,然后选择哪部分有根,之后重复计算,直到找到想要的答案。
Q1 : 用repeat loop 写分半算法找出 f(x) = x^3 +2 x^2 -7的根 ,精确到6位小数,已知根在[0,2]之间。。。
>Eratosthenes <- function(n) {
+ if( n>2) {
+ sieve <- seq(2,n)
+ primes <- c()
+ while ( length(sieve) >0 ) { #Q2:这个写>1可以吗,反正sieve 都是已经是seq(2,n)
+ p <- sieve[1] # Q3: 为什么不写sieve[0]呢
+ primes <- c ( primes, p)
+ sieve <- sieve [ (sieve %% p )!=0]
+ }
+ return (primes) # Q4: return 其他数会有什么影响
+ } else {
+ stop (" Input value >=2.") # Q5:stop什么作用。
+ }
+ }
Q6, 展示 在sieve 里 P>= sqrt(n) 的剩余数是prime,...什么意思?我也不明白这问题想问什么。。。
Q7, 用break 去优化这function的结果。。。那break加在哪里?
问题比较多,,,望见谅啊。。。。非常感谢先
Q6原题 : show that once p >= sqrt(n) all remaining entries in sieve are prime.
追答这就是我Q7说的:其实可以写个break条件,当p>=sqrt(100)就可以停止了,因为当时sieve里的2到100已经只剩下质数。
为何?就拿100来说,根号100=10,也就是说比10大的因子都无需考虑。
问:那11呢,比如77,99这些数都是11的倍数啊。
答:但由于77同样也是7的倍数,在之前就被抹掉了,99是3的倍数。
所以不会有任何一个数,既比n大,他的因子又都比根号n大,那些在根号n之后都存活下来的数,就都是质数了。