嘿,我在这里遇到一个奇怪的错误。此函数只是找到一个数字的正确除数并返回它们。
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;
但是我和数字都应该是整数...我知道我是一个整数。但即使我尝试
num = int8(num)
或类似的东西,我仍然得到错误。
感谢阅读!
答案 0 :(得分:1)
如果num
是奇数,则num/2
不是整数...
答案 1 :(得分:0)
您的行只包含两个用于编制索引的部分。
i
和
num/2
正如您已经提到i
和num
是整数,唯一合乎逻辑的解释是num
是奇数。
然后num/2
将不是整数。
也许您有兴趣使用fix(num/2)
(这将有效地用于divisors
的创作),或者可能round
或ceil
。
答案 2 :(得分: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;
祝你有美好的一天。