回 帖 发 新 帖 刷新版面

主题:判断一个数是否素数的程序改错

题目是:验证输入的自然数是否是素数,对输入的非自然数给出警告信息“输入参数误,M必是自然数”,并结束程序运行,当输入数是自然数且不是素数,显示信息“M不是素数”,当输入数是自然且是素数显示信息,“M是素数” 
程序是:
function sushu(m)
           %验证自然数M是否是素数
           if  m<=0|m-round(m)~=0
           warning(‘输入参数错误,M必是自然数’)
 return
end 
k=sqrt(m);k=floor(m);
for i=1:k
 if rem(m,i)==0
  disp(‘m不是素数’)
  break
else if  i>=k
  disp(‘m是素数’)
end
end
运行的时候总是出现错误 恳请哪位高手帮帮忙!紧急!

回复列表 (共5个回复)

沙发

1. 首先你的引号用的就不对,要用英文模式下的引号
2. k=floor(m) 应写为 k=floor(k);

板凳


没有效果啊,我使用的是英文状态下的字符   还有你把那个m改成k也没有效果啊

3 楼

%function sushu(m)
           %验证自然数M是否是素数
           clc;
           m=117;
           if  m<=0|m-round(m)~=0
           warning('输入参数错误,M必是自然数')
 return
end 
k=sqrt(m);k=floor(k);
for i=2:k
 if rem(m,i)==0
  disp('m不是素数')
  break
else if  i>=k
  disp('m是素数')
    end
 end
end

以上程序在我电脑下测试通过。

4 楼


 嗯 非常感谢你的回答。不过有个小问题,如果m的值要在命令窗口输入的话那该怎么改啊?
再次感谢你的帮助!

5 楼

很简单,把第一行的注释去掉,变成function,
然后在命令行里输入 sushu(17), 或者在别的程序里调用, sushu(m), 但m要在之前被赋值。
我把第一行变成注释,是为了调试方便。

function sushu(m)
           %验证自然数M是否是素数
           clc;
          % m=117;
           if  m<=0|m-round(m)~=0
           warning('输入参数错误,M必是自然数')
 return
end 
k=sqrt(m);k=floor(k);
for i=2:k
 if rem(m,i)==0
  disp('m不是素数')
  break
else if  i>=k
  disp('m是素数')
    end
 end
end

我来回复

您尚未登录,请登录后再回复。点此登录或注册