【发布时间】:2018-04-14 02:26:27
【问题描述】:
我正在尝试用 Matlab 解决 Project Euler 的问题 #12,这就是我想出的找到给定数字的除数的方法:
function [Divisors] = ND(n)
p = primes(n); %returns a row vector containing all the prime numbers less than or equal to n
i = 1;
count = 0;
Divisors = 1;
while n ~= 1
while rem(n, p(i)) == 0 %rem(a, b) returns the remainder after division of a by b
count = count + 1;
n = n / p(i);
end
Divisors = Divisors * (count + 1);
i = i + 1;
count = 0;
end
end
在此之后,我创建了一个函数来评估产品n * (n + 1) / 2 的除数以及该产品何时达到特定限制:
function [solution] = Solution(limit)
n = 1;
product = 0;
while(product < limit)
if rem(n, 2) == 0
product = ND(n / 2) * ND(n + 1);
else
product = ND(n) * ND((n + 1) / 2);
end
n = n + 1;
end
solution = n * (n + 1) / 2;
end
我已经知道答案,这不是函数Solution 的返回值。有人可以帮我找出编码的问题。
当我运行Solution(500)(500 是问题中指定的限制)时,我得到76588876,但正确答案应该是:
76576500.
【问题讨论】: