我正在尝试编写一个简短的脚本,可以打印出所有素数高达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创建