我的函数代码(MATLAB/OCTAVE)有什么问题

我的函数代码(MATLAB/OCTAVE)有什么问题,matlab,function,octave,Matlab,Function,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']

我正在努力使我的程序工作。这是质数

下面是我的函数,然后是我的主程序

我相信这是正确的格式,(显然我可能是错的,因为它不工作),我一直试图修复它,但没有任何效果。任何帮助都将是非常感谢的,解释我做错了什么(我很确定这与微妙的格式有关)也将是非常好的

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

Matlab有一个
factor
函数,它实现了代码的功能

p = factor(10)
返回2,5 及

返回11

您只需测试
长度

if length(p) == 1

对于素数来说是
true

正如Magla所指出的,MATLAB提供了
primes
factor
函数,您至少可以使用它们来比较实现和/或检查结果

无论如何,对于您的代码,请尝试以下操作:

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
函数[answer,primefactors]=primey1(N)
%对以下简单情况使用矢量化:
A=雷姆(N,2:N-1);
如果全部(A)
答案=‘是’;
素数因子=[1,N];
%重新编写了整个部分。它有很多问题:
%命令的顺序是错误的,没有为某些N指定变量,
%等等。只需比较两种实现
其他的
答案=‘不’;
原始因子=[];
对于ii=2:N
q=0;
而N/ii==楼层(N/ii)
N=N/ii;
q=q+1;
结束
如果q>0
primefactors=[primefactors,ii];%#好啊
如果N==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 = [];

我使用的主要程序功能是:N=15485863;[答案,primefactors]=prime1(N);fprintf(“%i”是素数吗?%s\n',n,answer)fprintf(“%i”的素数因子是:\n',n)fprintf(“%i\n',素数因子)对于初学者来说。。。它的格式不太好,你能再详细解释一下:“因为它不工作”吗?您是否收到特定的错误消息?它试图做什么?我不想试图解释代码在做什么,并发现它有什么问题。我尝试了不同的方法来调整它,它说要么是输出有错误(就好像输出不存在一样)。程序要确定N值是否是素数,如果是,它的素数因子是什么。用问题中的代码“解决”这个问题的关键因素是理解,为什么它声称输出没有定义。正如罗迪所展示的,这是因为你打破了它。
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 = [];