0

ここで奇妙なエラーが発生します。この関数は、単純に数値の適切な約数を見つけて返します。

function [divisors] = SOEdivisors(num)
%SOEDIVISORS This function finds the proper divisors of a number using the sieve
%of eratosthenes


    %check for primality
    if isprime(num) == 1
        divisors = [1];


    %if not prime find divisors
    else
        divisors = [0 2:num/2]; %hard code a zero at one.

        for i = 2:num/2
            if divisors(i) %if divisors i ~= 0

                %if the remainder is not zero it is a divisor
                if rem(num, divisors(i)) ~= 0

                    %remove that number and all its multiples from the list
                    divisors(i:i:num/2) = 0;
                end
            end
        end

        %add 1 back and remove all zeros
        divisors(1) = 1;
        divisors = divisors(divisors ~= 0);
    end
end

私が受け取るエラーは次のとおりです。

Integer operands are required for colon operator when used as index

23行目を指します。

23行目は

divisors(i:i:num/2) = 0;

しかし、I i と num は両方とも整数でなければなりません... i が整数であることはわかっています。でもやってみても

num = int8(num)

またはそのようなもの、私はまだエラーが発生します。

読んでくれてありがとう!

4

3 に答える 3

1

numが奇数の場合、 は整数num/2ではありません...

于 2013-10-10T15:44:18.627 に答える
0

使用している場合:

コマンドのコードでは、結果が 0.1 または 0.2 または 2.1 などの非ポイント番号であることを知っていることを意味します。1 または 2 または 21 が必要です。また、結果は符号なしの数値でなければなりません。たとえば、1 または 2 または 21 で、-1 または -2 または -21 ではありません。

次に、符号付きの int 型を使用するか、" fix();" コマンドから使用します。例えば:

a=2.1;

a=fix(a); 「a」の値は 2 になります。良い一日を。

于 2015-10-11T00:44:05.050 に答える
0

行には、インデックス作成に使用される 2 つの部分のみが含まれています。

i

num/2

inumは整数であると既に述べたように、唯一の論理的な説明はそれnumが奇数であるということです。

次にnum/2、整数ではありません。


おそらく、使用に興味があるでしょう(fix(num/2)これは、 の作成に効果的に使用されるものですdivisors) 。roundceil

于 2013-10-10T15:45:11.130 に答える