Skip to content

Instantly share code, notes, and snippets.

@edubart
Last active July 13, 2016 15:32
Show Gist options
  • Save edubart/eb1511587b025c182d525405783d008d to your computer and use it in GitHub Desktop.
Save edubart/eb1511587b025c182d525405783d008d to your computer and use it in GitHub Desktop.
Euler 50 problem
% O primo 41 pode ser escrito como a soma de 6 primos consecutivos
% 41 = 2 + 3 + 5 + 7 + 11 + 13
% Essa eh a a soma mais longa de primos consecutivos menor
% que 100 em que resulta em tambem em um numero primo, ela contem 6 termos
% A soma mais longa de primos consecutivos menor que 1000 em que resulta
% um numero primo eh 953 com 21 termos
%
% Qual primo menor que 1 milhao pode ser escrito como a soma mais longa
% de primos consecutivos?
%
% Quantos numeros primos podem ser escrito como um somatorio de outro numeros primos
%
N = 10000;
% encontra todos primos usando crivo de eratostenes
ehprimo = ones(N,1);
ehprimo(1) = 0;
for i=2:floor(sqrt(N))
if ehprimo(i)
for j=i+i:i:N
ehprimo(j) = 0;
end
end
end
% cria o vetor com somatorio dos primos encontrados
sprimos = [0];
primos = [];
for i=2:N
if ehprimo(i)
sprimos = [sprimos; sprimos(end)+i];
primos = [primos; i];
end
end
nprimos = length(primos);
% encontra o primo do problema
% yterms = zeros(N,1);
% for i=2:nprimos
% for j=i-2:-1:0
% n = sprimos(i+1) - sprimos(j+1);
% if n > N break end
% t = i-j;
% yterms(n) = max(yterms(n), t);
% end
% end
%scatter(1:N, yterms,8,ehprimo * [1 0 0], 'filled')
% goldbach
goldbach = zeros(N,1);
goldcolors = ones(N,3);
for i=1:nprimos
for j=1:nprimos
n = primos(i) + primos(j);
if n > N break end
if mod(n,2) != 0 continue end
goldbach(n) += 1;
if mod(n,3) == 0 && mod(n,5) == 0 && mod(n,7) == 0
goldcolors(n,1:3) = [0.5 0.5 0.5];
elseif mod(n,3) == 0 && mod(n,5) == 0
goldcolors(n,1:3) = [1 1 0];
elseif mod(n,5) == 0 && mod(n,7) == 0
goldcolors(n,1:3) = [0 1 1];
elseif mod(n,3) == 0 && mod(n,7) == 0
goldcolors(n,1:3) = [1 0 1];
elseif mod(n,3) == 0
goldcolors(n,1:3) = [1 0 0];
elseif mod(n,5) == 0
goldcolors(n,1:3) = [0 1 0];
elseif mod(n,7) == 0
goldcolors(n,1:3) = [0 0 0];
end
end
end
scatter(1:N, goldbach, 5, goldcolors, 'filled')
% Exemplo ate 30
% 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
% ehprimo: 0 1 1 0 1 0 1 0 0 0 1 0 1 ..
% primos: 2 3 5 7 11 13 17 19 23 29
% sprimos: 0 2 5 10 17 28 41 58 77 100 129
% 17 com 4 termos
@edubart
Copy link
Author

edubart commented Jun 8, 2016

Result is 997651 with 543 terms.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment