4068 7

[问答] 为什么我写的这个判断是否为素数的函数总是报错啊 [推广有奖]

  • 1关注
  • 0粉丝

大专生

11%

还不是VIP/贵宾

-

威望
0
论坛币
311 个
通用积分
11.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
100 点
帖子
15
精华
0
在线时间
62 小时
注册时间
2016-2-6
最后登录
2025-5-18

楼主
时升翠微上3 发表于 2018-1-22 16:42:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
prime <- function(x){
  for(i in 2:n-1){
    if(x%i == 0){
             print("x is not a prime")
    }esle{
      print("x is a prime")
      }
  }
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:prime IME Rim

沙发
时升翠微上3 发表于 2018-1-22 16:43:53
补充一下, 是else,我自己从那边打过来的时候打错了

藤椅
zhouhao211314 发表于 2018-1-22 17:07:10
2:(n-1)

板凳
cheetahfly 在职认证  发表于 2018-1-22 17:19:14
错误一大把,除了楼上指出来的,我至少还看到三个:n是哪来的,x%i是什么,为什么print()在for循环以内

报纸
时升翠微上3 发表于 2018-1-22 18:03:30
cheetahfly 发表于 2018-1-22 17:19
错误一大把,除了楼上指出来的,我至少还看到三个:n是哪来的,x%i是什么,为什么print()在for循环以内
大佬!被你这么一说,我重新认真检查了一下自己的代码,请过目!
prime1 <- function(x){
  j <- FALSE
  for(i in 2:(x-1))
    if(any(x%%i ==0)==F)
      j <- TRUE
  ifelse(j,"X is not a prime","X is a prime")
}
小弟调试过一下, 这样写虽然没错,但总感觉这段代码不够简洁,请斧正!

地板
cheetahfly 在职认证  发表于 2018-1-22 22:55:25
时升翠微上3 发表于 2018-1-22 18:03
大佬!被你这么一说,我重新认真检查了一下自己的代码,请过目!
prime1
如果不考虑诸多容错,比如非正整数,3的判定等。还需要注意:
第一,j <- FALSE不必要,R不需要事先申明变量;
第二,j这个变量也不是必要存在的;
第三,x%%i是个标量,不需要用any;

我提供思路给你参考:
  1. prime2 <- function(x) {
  2.     for (i in 2:(x - 1)) {
  3.         if(x %% i == 0)
  4.             return("X is not a prime")
  5.     }
  6.     "X is a prime"
  7. }
复制代码
虽然R语言要尽量避免用for循环,但也不是绝对的,上面的例子中,只要出现第一个能整除的,整个函数就结束了,在很多场合反而更加有效率,当然,对于真正大的素数就会很慢。
  1. prime3 <- function(x) {
  2.     if (any(x %% 2:(x - 1) == 0))
  3.         return("X is not a prime")
  4.     "X is a prime"
  5. }
复制代码
这里就是一个R语言风格的编程了,用向量化来计算,因此不需要for循环。

7
时升翠微上3 发表于 2018-1-25 10:24:50
cheetahfly 发表于 2018-1-22 22:55
如果不考虑诸多容错,比如非正整数,3的判定等。还需要注意:
第一,j
多谢大佬指教!非常感谢!!!!!

8
hanson.don 发表于 2018-1-27 23:34:59
首先,求余数是用“%%”,其次,这代码逻辑上是错误的;最后,乱用变量,n是哪来的,应该是用x!
prime<-function(n){
    lprime=T
    for( i in 2:ceiling(sqrt(n))){
        if(n %% i==0){
            lprime=F
            break
        }
    }
    if(lprime){print(paste(n,"is a prime",sep=" "))}
    else{print(paste(n,"is not a prime",sep=" "))}
}

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 04:22