|
发表于 2017-6-14 22:51:23
|
显示全部楼层
此代码使用matlab编程
Problem37所用时间为: 14.9352秒
Problem37的答案为: 748317
- %% Problem37.m
- % 最后编辑时间:17-06-14 22:34
- % 找出11个双向裁剪质数的和
- % Problem37所用时间为: 14.9352秒
- % Problem37的答案为: 748317
- function Output = Problem37()
- tic
- Limit = 1000000;
- Vector = GetPrime(Limit);
- Vector = Vector(5:end);
- N = length(Vector);
- Output = 0;
- Time = 0;
- for ii = 1:N
- Judge = 1;
- L = length(num2str(Vector(ii)));
- for jj = 1:L-1
- if isprime(floor(Vector(ii)/(10^jj))) == 0
- Judge = 0;
- break
- end
- end
-
- if Judge == 1
- Str = num2str(Vector(ii));
- for jj = 2:L
- if isprime(str2double(Str(jj:L))) == 0
- Judge = 0;
- break
- end
- end
- end
-
- if Judge == 1
- Output = Output + Vector(ii);
- Time = Time + 1;
- disp(Vector(ii))
- if Time == 11
- break
- end
- end
-
- end
- toc
- disp('此代码使用matlab编程')
- disp(['Problem37所用时间为: ',num2str(toc),'秒'])
- disp(['Problem37的答案为: ',num2str(Output)])
- end
- %% 得到n以下的所有质数
- function Vector = GetPrime(n)
- if nargin == 0
- n = 10000;
- end
- Judge = ones(1,n-1);
- Judge(1) = 0;
- for ii = 1:n-1
- if Judge(ii) == 1
- for jj = 2*ii : ii : n-1
- Judge(jj) = 0;
- end
- end
- end
- Vector = find(Judge == 1);
- end
复制代码 |
|