确定素数[图灵]

时间:2010-01-26 21:05:46

标签: primes turing

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是素数,我们知道错了所以......
我的代码有什么问题,我该如何解决?

3 个答案:

答案 0 :(得分:6)

嗯,我不懂那种语言,但它看起来相当容易阅读。你的第一个问题是这一行:

if (primenum / primenum) = 1 or primenum / 1 = 0 then

这是测试以查看primenum除以primenum是否为1,或primenum除以1是否为零。第一个条件将始终为true,因此您的算法将报告每个整数都是素数。

让我们回想一下素数的定义。如果自然数n具有两个不同的自然数除数,则它是素数。这意味着要检查并查看n是否为素数,您必须验证n1n之外没有其他除数(请注意隐式{{} 1}}不能等于n,否则它的唯一除数是11,它们不相同。要做到这一点,只需考虑可能是除1n之外的1除数的所有可能数,并检查其中是否有任何除数n。这意味着我们只需从n循环到2,检查这些数字中的任何一个是否均匀划分n - 1n2范围内的自然数是唯一可能使n - 1无效的数字。

因此,实施关于数字是否为素数的测试的最天真的方式如下。接受数字n作为输入。然后,检查n是否小于n。如果是,它不能是素数。然后,从2循环到2;调用循环变量n - 1。检查kk中的任何2是否均匀划分n - 1n)。如果有这样的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和它自身整除(所有数字都有这些属性),但它不能被其他任何东西整除

尝试从那里开始工作。