尝试编写一个简短的脚本,可以计算r中小于或等于100的所有素数

  • 本文关键字:小于 计算 脚本 一个 r
  • 更新时间 :
  • 英文 :


我正在尝试编写一个简短的脚本,可以打印出所有素数高达100,如果数字小于2,然后返回"false"。我有点被我的逻辑卡住了……仍然是编程新手,所以代码可能对你们中的一些人来说没有意义(不要太苛刻),不知道如何将想法转化为代码……但这就是我现在所拥有的!

prime_numbers <- function(x){
pnums <- vector()
for (i in 2:x) {
if (i >= 2) {
pnums = c(pnums,i)
return (pnums)
if (i %% 2==0) {
return(FALSE)
}
}
}
}
prime_numbers(100)  

你的逻辑不太对。也许是这样的?

prime_numbers <- function(x)
{
if(x < 2) return(FALSE)

result <- vector()

for(i in 2:x) if(!any(i %% result == 0)) result <- c(result, i)
return(result)

}

这似乎给出了期望的行为:

prime_numbers(100)  
#>  [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
prime_numbers(2)
#> [1] 2
prime_numbers(1000)
#>   [1]   2   3   5   7  11  13  17  19  23  29  31  37  41  43  47  53  59  61
#>  [19]  67  71  73  79  83  89  97 101 103 107 109 113 127 131 137 139 149 151
#>  [37] 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251
#>  [55] 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359
#>  [73] 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463
#>  [91] 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593
#> [109] 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701
#> [127] 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827
#> [145] 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953
#> [163] 967 971 977 983 991 997

这不是一个非常有效的算法,因为计算时间呈指数增长,大约需要150微秒才能找到100以下的所有质数,3毫秒才能找到1000以下的所有质数,200毫秒才能找到10000以下的所有质数。尽管如此,逻辑还是很容易理解的。

由reprex包(v2.0.0)于2018-10-19创建

相关内容

  • 没有找到相关文章

最新更新