put "enter a number to determine if it is or is not prime"
get primenum
% for i : 1 .. primenum by 1
% end for
if (primenum / primenum) = 1 or primenum / 1 = 0 then
put primenum, " is a prime number"
else
put primenum, " is not a prime number"
end if
输出说12是素数,我们知道错了所以......
我的代码有什么问题,我该如何解决?
答案 0 :(得分:6)
嗯,我不懂那种语言,但它看起来相当容易阅读。你的第一个问题是这一行:
if (primenum / primenum) = 1 or primenum / 1 = 0 then
这是测试以查看primenum
除以primenum
是否为1,或primenum
除以1是否为零。第一个条件将始终为true,因此您的算法将报告每个整数都是素数。
让我们回想一下素数的定义。如果自然数n
具有两个不同的自然数除数,则它是素数。这意味着要检查并查看n
是否为素数,您必须验证n
除1
和n
之外没有其他除数(请注意隐式{{} 1}}不能等于n
,否则它的唯一除数是1
和1
,它们不相同。要做到这一点,只需考虑可能是除1
和n
之外的1
除数的所有可能数,并检查其中是否有任何除数n
。这意味着我们只需从n
循环到2
,检查这些数字中的任何一个是否均匀划分n - 1
。 n
到2
范围内的自然数是唯一可能使n - 1
无效的数字。
因此,实施关于数字是否为素数的测试的最天真的方式如下。接受数字n
作为输入。然后,检查n
是否小于n
。如果是,它不能是素数。然后,从2
循环到2
;调用循环变量n - 1
。检查k
到k
中的任何2
是否均匀划分n - 1
(n
)。如果有这样的if n mod k = 0
,则k
不能成为素数,您可以从循环中断开。否则,如果循环终止而没有中断,那么n
是素数。所以,在伪代码中
n
现在,只是关于您的代码的一个小评论。不要为输入integer n
get n
boolean flag
if n < 2
flag = false
else
flag = true
for k = 2 to n - 1
if n mod k = 0
flag = false
break
if flag
print "prime"
else
print "not prime"
命名。您的代码的读者可能会认为primenum
实际上是素数,因为您将其命名为。像primenum
这样的名字在这里是非常受欢迎的。
答案 1 :(得分:1)
你的代码......没有多大意义。
% for i : 1 .. primenum by 1
% end for
呜。空循环。除了刻录时钟周期外什么都不做。
if (primenum mod primenum) = 0
永远是true
。
另外,你的病情错了。如果 可以被某些东西整除(除了它本身和1之外),那么不是 prime。
解决方案?可能会在psuedocode中重写它,然后把它变成真正的代码,而不是试图在不理解它的情况下破解它。
答案 2 :(得分:0)
素数的定义属性并不是 可被1和它自身整除(所有数字都有这些属性),但它不能被其他任何东西整除
尝试从那里开始工作。