How can the year 2011 be expressed as the sum of consecutive primes in MATLAB 7.11 (R2010b) ?
2 次查看(过去 30 天)
显示 更早的评论
I heard that the number 2011 can be expressed as the sum of 11 consecutive prime numbers. How can I find those numbers in MATLAB?
0 个评论
回答(4 个)
Walter Roberson
2011-1-20
t = 1:2011;t = t(isprime(t)); p = cumsum(t);t(find(p(12:end) - p(1:end-11) == 2011) + (1:11))
0 个评论
Matt Fig
2011-1-20
Another method:
N = 2011; % Given
P = primes(N/4); % Conservative estimate for ceiling
M = N/11; % The mean
[I,I] = min(abs(filter(ones(1,11)/11,1,P)-M)); % Moving average comparison.
SOL = P(I-10:I) % The desired primes.
sum(SOL)==N %Check that the solution is good
0 个评论
John D'Errico
2011-1-20
There are many solutions to this. Brute force is one.
>> p = primes(2011);
>> find(conv(p,ones(1,2)) == 2011)
ans =
306
>> find(conv(p,ones(1,3)) == 2011)
ans =
123 307
>> find(conv(p,ones(1,4)) == 2011)
ans =
308
>> find(conv(p,ones(1,5)) == 2011)
ans =
309
>> find(conv(p,ones(1,6)) == 2011)
ans =
310
>> find(conv(p,ones(1,7)) == 2011)
ans =
311
>> find(conv(p,ones(1,8)) == 2011)
ans =
312
>> find(conv(p,ones(1,9)) == 2011)
ans =
313
>> find(conv(p,ones(1,10)) == 2011)
ans =
314
>> find(conv(p,ones(1,11)) == 2011)
ans =
47 315
See that there are two cases where find found more than 1 result that yielded 2011. They correspond to the case for a sum of 3 consecutive primes, and 11 consecutive primes.
>> p(123 + [-2:0])
ans =
661 673 677
>> sum(ans)
ans =
2011
Here is the set of 11 primes.
>> p(47 + [-10:0])
ans =
157 163 167 173 179 181 191 193 197 199 211
>> sum(ans)
ans =
2011
However, you can be more creative. If a set of 11 primes will sum to 2011, then they must average...
>> 2011/11
ans =
182.82
Therefore the middle prime, if a set of 11 consecutive primes will solve this problem, must be roughly 183. The closest prime to 183 is 181. Testing the set of 5 primes below that value and the 5 above it does yield 2011, as we showed above. We can use similar logic to find a set of 17 consecutive primes that sum to the number 17717.
>> 17717/17
ans =
1042.2
Checking the 17 primes that bracket 1042 or so, we find this set, which does sum to the value I specified.
>> sum([991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093])
ans =
17717
6 个评论
John D'Errico
2011-1-20
Are you sure?
>> 449+457+461
ans =
1367
>> sum([101 103 107 109 113 127 131 137 139 149 151])
ans =
1367
I found 240 as the smallest number with 3 distinct sums, then 311 as the smallest representable as 4 distinct sums of primes.
>> sum([101 103 107])
ans =
311
>> sum([53 59 61 67 71])
ans =
311
>> sum([31 37 41 43 47 53 59])
ans =
311
>> sum([11 13 17 19 23 29 31 37 41 43 47])
ans =
311
Matt Fig
2011-1-20
A yes. I was only considering primes, as 2011 is prime. I copied the results for the second prime who has 3 unique sums by mistake. Here are the numbers for 1151:
[379 383 389]
[223 227 229 233 239]
[7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101]
I guess I misunderstood what you were after.
Doug Hull
2011-1-17
stack = [];
for i = 1:2011
if isprime(i)
stack = [i stack];
end
if numel(stack) > 11
stack = stack(1:11);
end
if sum(stack) == 2011
disp(sum(stack))
disp(stack)
break
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Number Theory 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!