This code takes an extremely long time to run (more than 10 minutes). Is there any way in which I can optimize it so that it finishes in less than one minute?
clear all;
for i = 1:1000000
harmonicsum = 0;
lhs = 0;
for j = 1:i
% compute harmonic sum
harmonicsum = harmonicsum + 1/j;
% find sum of factors
if (mod(i,j)==0)
lhs = lhs + j;
end
end
%define right hand side (rhs) of Riemann Hypothesis
rhs = harmonicsum + log(harmonicsum) * exp(harmonicsum);
if lhs > rhs
disp('Hypothesis violated')
end
end
@b3 has a great vectorization of
rhs.One typo though, needs to use
timesand notmtimes:For
lhs, I propose the following, loosely based on Eratosthenes’ Sieve:Execution time is just 2.45 seconds (for this half of the problem). Total including calculation of
rhsandfindis under 3 seconds.I’m currently running the other version to make sure that the results are equal.
EDIT: found a bug with
lhs(1)and special-cased it (it is a special case, the only natural number where 1 and N aren’t distinct factors)