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 和 num 都应该是整数......我知道 i 是一个整数。但即使我尝试

num = int8(num)

或类似的东西,我仍然得到错误。

谢谢阅读!

4

3 回答 3

1

如果num是奇数则num/2不是整数...

于 2013-10-10T15:44:18.627 回答
0

您的行仅包含用于索引的两个部分。

i

num/2

正如您已经提到的那样,i并且num是整数,唯一合乎逻辑的解释num是奇怪的。

那么num/2就不是整数了。


也许您有兴趣使用fix(num/2)(这将有效地用于创建divisors),或者可能是roundceil

于 2013-10-10T15:45:11.130 回答
0

当您使用时:

在命令代码中,这意味着您知道结果是非点数,例如 0.1 或 0.2 或 2.1 。你应该有 1 或 2 或 21 。您的结果也必须是无符号数。例如:1 或 2 或 21 而不是 -1 或 -2 或 -21。

然后使用带符号的 int 类型或使用 from " fix();" 命令。例如:

a=2.1;

a=fix(a); 那么“a”值将是 2 ;有美好的一天。

于 2015-10-11T00:44:05.050 回答