定义提示数字是否为素数



我想要一个代码来定义用户是否素数的提示数字。 因为它是作业我不允许使用" isprime"预定义代码。以下方法没有用:

N = input( 'please enter a positive enteger value = ' ) ; 
Quotient = floor(N - (mod(N,2)./2)) ; 
for i = 1 : Quotient  
    if mod(N,i ) == 0 
        fprintf(' your prompted number is not prime ' ) ;
        if mod(N,i) ~= 0 
            fprintf(' your prompted number is   prime ' ) ; 
        end
    end
end

例如,如果我输入一个像 13 这样的质数,它会导致这样:

 your prompted number is  prime

但是如果我输入像 12 这样的非素数 num,它会重复 "您的提示数字是素数 "消息 10 次。

for i = 1 : Quotient  
    if mod(N,i ) == 0 

这将给你每个数字,因为x mod 1总是零。换句话说,余数(当您将任何正整数除以 1 时)为零,因为它们都完美地除以。

您需要从 2 而不是 1 开始。

此外,一旦你发现这个数字不是素数,你应该停止循环,因为在那之后它不可能再次成为素数:-)而且,为了提高效率,您只需要上升到数字的平方根,因为如果它的因子高于该因子,您已经找到了低于该因子的等效因子。

这种野兽的伪代码是:

set isprime to true
set chkval to 2
while chkval * chkval <= number:
    if number mod chkval is zero:
        set isprime to false
        exit while
    end if
    increment chkval
end while
if isprime:
    say number, " is prime"
else:
    say number, " is composite"

尝试找到因素,一旦找到一个,你就知道它不是素数:

prime = true
for f = 2:ceil(sqrt(N)) %// Start from 2 as prime numbers DO have 1 as a factor. Anything larger than sqrt(N) will have to have a corresponding factor smaller than this so there is no point checking them
    if mod(N,f) == 0
       prime = false;
       break;
    end
end

您的代码有 2 个问题。首先,正如paxdiablo已经解释的那样,您需要从 2 开始循环 .其次,你已经嵌套了你的if语句,并且由于它们是互斥的条件,所以内部条件永远不会触发。

最新更新