2016-12-02 5 views
-4

Я написал свою собственную функцию в MATLAB, которая вернет мне «истину», если входной номер является простым числом и «ложным», если это не так.MATLAB не выдаст ответ

С цифрами 0, 1 и 2 он работает, но с чем-то выше 2 он ничего не делает. (Кстати, я воссоздал IsPrime, так OBV я не буду использовать это здесь.)

function [A] = myprime(p) 
    m = 2; 

    if p<1 
     disp('Number too low') 
    end 

    if p == 1 
     A = false; 
    end 

    if p == 2 
     A=true; 
    end 

    if p < 2 
     while m < p 
      A = true; 
      x = mod(p, m); 
      if x == 0 
       m=p; 
       R=false; 
      end 
      m=m+1; 
     end 
    end 
end 

Как вы можете видеть, это не дает результатов для 0,1 и 2, но ничего для любого числа выше 2:

Enter image description here

+6

Не зная о специфике Matlab, довольно очевидно, что у вас нет кода для обработки любых случаев, когда 'p> 2'. Похоже на typeo на вашем последнем 'if' возможно. Не могу сказать дальше. – CollinD

+4

Кроме того, в любом случае нет кода, который устанавливает 'A = false''. Таким образом, даже при удалении опечатки все номера ввода возвращаются как простые. Я полагаю, что «R = false», это еще одна опечатка и должна быть «A = false». –

ответ

0

есть проблема с вашим кодом, вы не объявлять состояние, где р> 2, а также я думаю, что линия, что вы объявленную

if p<2 
while m<p 

это не так, потому что вы установили т = 2 и что государства не произойдет.