首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >素数函数,打印素数因子

素数函数,打印素数因子
EN

Stack Overflow用户
提问于 2016-04-04 19:28:08
回答 2查看 1.2K关注 0票数 1

我正在尝试用R做一些编程练习,希望能够检查一个数字是否为质数,如果不是,则打印出因数。这种方式是可行的,除非IF语句在第一个非零余数处停止。如有任何建议,我们将不胜感激。谢谢。

代码语言:javascript
运行
复制
num<-12
x<-2
while(x < num){
  if(num%%x == 0){
    print(paste(x, "is a factor of", num))
    x <- x+1
    print(paste(num, "is not a prime number"))
} else {
    x <- num
    print(paste(num, "is a prime number"))
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-04-04 19:58:40

  1. ,如果你想打印素数因子,你需要将你刚刚检查的数字除以它的除数,然后继续用相同的除数检查,然后再增加。这就是为什么它给出4作为质数因子,而它应该是两个2。
  2. 如果这个数字不能被x整除,那么你还需要增加x来检查下一个数字,这就是为什么它立即说15是一个质数。

一个非常快速和肮脏的实现,有很多改进的空间:

代码语言:javascript
运行
复制
num <- 12
current <- num
x <- 2

while (x <= num - 1){
  while (current %% x == 0) {
    current <- current / x
    print(paste(x, "is a prime factor of", num))
  }
  x <- x + 1
}
if (num == current) print(paste(num, "is a prime number"))

此外:

R确实不是一种应该用来做这样的事情的语言。

因为它不能被矢量化,所以R是做这些事情的一个非常糟糕的选择。除非使用概率测试(这在R中也可能很慢),否则检查素性可能会在计算上非常密集,即使使用优化也是如此。

如果你想在R中做一些低级的事情,我会研究一下C++ (和Rcpp)。

票数 3
EN

Stack Overflow用户

发布于 2016-04-04 19:59:04

代码语言:javascript
运行
复制
num <- 7 # number to be evaluated
factors <- integer(num - 2) # initialize factors

# loop from 2 to num-1
for (i in 2:(num-1)) {
  # check if i is a factor of num
  if ((num%%i)==0) {
    # add i to vector of factors
    factors[i-1] <- i 
  }
}

# remove factors==0
factors <- factors[factors!=0]

# check if vector factors is not empty
# length(factors) returns false only if factors is empty
if (length(factors)) {
  cat(paste(num, "is NOT a prime number. Factors:\n"))
  cat(factors)
} else {
  cat(paste(num, "is a prime number."))
}

+++编辑:按照罗兰的建议进行更改

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36401364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档