2013-09-05 70 views
-2

我想讓我的程序工作。這是素數。我的功能代碼有什麼問題(MATLAB/OCTAVE)

下面是我的功能,那麼我的主要程序

我相信這是正確的格式,(很明顯,我可能是錯的原因它不工作),我一直在試圖修復它沒有用。任何幫助將是最受讚賞的,並解釋我做錯了什麼(我非常肯定它與微妙的格式化有關)也會很好。

function [answer,primefactors ] = primey1 (N) 
for i=2:(N-1) 
    A(i-1)=rem(N,i); 
end 
A; 
if(all(A)==1) 
    answer=['Yes'] 
    primefactors=[1,N] 
elseif(all(A)==0) 
    answer=['No'] 
    fac=[] 
    for i=2:N 
     q=0; 
     while N/i==floor(N/i) 
      N=N/i; 
      q=q+1; 
     end 
     if q>0 
      fac=[fac,i] 
      if N==1 
       break 
       primefactors=[fac] 
      end 
     end 
    end 
end 

endfunction 
+0

我使用主程序的功能是: N = 15485863; [answer,primefactors] = primey1(N); fprintf('Is%ia prime?%s \ n',N,answer) fprintf('%i的主因子是:\ n',N) fprintf('%i \ n',主因子) –

+0

對於初學者...它格式不正確 – Nick

+0

你能解釋一下:「*導致它不工作*」在更詳細一點,請嗎?你是否收到特定的錯誤信息? – Schorsch

回答

1

Matlab具有一個factor功能做什麼你的代碼是試圖做

p = factor(10) 

回報2,5 和

p = factor(11) 

收益11

所有你有測試length

if length(p) == 1 

對於質數是true

+0

...大致相同。看'編輯因素'。 –

4

正如Magla指出的那樣,MATLAB自帶了primesfactor函數,您至少可以用它來比較您的實現和/或檢查結果。

無論如何,爲您的代碼,試試這個:

function [answer, primefactors] = primey1(N) 

    % Use vectorization for simple cases such as these: 
    A = rem(N,2:N-1); 

    if all(A) 
     answer = 'Yes'; 
     primefactors = [1,N]; 

    % Re-wrote this entire section. There were a bunch of things wrong with it: 
    % the order of commands was wrong, variables were not assigned for some N, 
    % etc. Just compare the two implementations 
    else 
     answer = 'No';   
     primefactors = []; 

     for ii = 2:N 

      q = 0;    
      while N/ii == floor(N/ii) 
       N = N/ii; 
       q = q+1; 
      end 

      if q > 0 
       primefactors = [primefactors,ii]; %#ok<AGROW> 
       if N==1     
        break; 
       end 
      end 

     end 

    end 

end 
+1

「解決」問題中代碼的關鍵因素是理解爲什麼它聲稱輸出沒有被定義。正如羅迪所表明的那樣,這是因爲你在休息之後設置了它。 – Schorsch

1

由@Rody提供的應該做的工作,在理論上甚至比這更有效的解決方案,但是說明初始化的概念,我會建議您在函數啓動後立即初始化函數的輸出變量。在你的情況,這將意味着我建議首先是這樣的代碼:

function [answer, primefactors] = primey1(N) 
% Function to determine whether a number is prime and which prime factors it has 

% Assign default values 
answer = 'No'; 
primefactors = [];