performance - Improving the code for Lemoine's conjecture -


i trying improve following code:

the code written solve following equation:

2*n + 1 = p + 2*q 

this equation denotes given integer number n value 2*n + 1 can represented p + 2*q p , q prime numbers. has been proved many years ago , called lemoine's conjecture.

the input code number (n>2) , output matrix including 2 columns of valid prime numbers.

n = 23; s =  2*n+1; p = primes(s); v = []; kk = 1; ii=1:length(p)     jj=1:length(p)             if (s == p(ii)+2*p(jj))                 v(kk,:) = [p(ii) p(jj)];                 kk = kk + 1;             end     end end 

the result ;

v =      13    17     37     5     41     3     43     2 

and instance:

2*23+1 = 43 + 2*2 

is there way rid of loops in matlab?

update:

suggested @daniel, works

n = 23; s =  2*n+1; p = primes(s); ii=1:length(p)     if ismember(s - p(ii),p)         v(kk,:) = [p(ii) s-p(ii)];     end end 

you can replace loops vectorized solution using bsxfun -

[r,c] = find(bsxfun(@eq,p-s,-2*p(:))); v = [p(c) ; p(r)].' 

with n = 100000, runtimes got -

------------ loopy solution elapsed time 33.789586 seconds. ----------- bsxfun solution elapsed time 1.338330 seconds. 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -