Last active
July 13, 2016 15:32
-
-
Save edubart/eb1511587b025c182d525405783d008d to your computer and use it in GitHub Desktop.
Euler 50 problem
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Result is 997651 with 543 terms.