mathematica试除法解素数问题
2016-05-22 03:52
375 查看
素数问题
试除法mathematica程序
对比matlab素数判断
更快的素数判断和素数求法等着同学们自己去探索了。
DivPrime[n_]:= Block[ {primeset={2,3}}, For[k=4,k<=n,k++, Block[{i,flag=True}, For[i=1,primeset[[i]]<=Sqrt[k]&&i<=Length[primeset],i++, If[Mod[k,primeset[[i]]]==0,flag=False;Break[]] ]; If[flag,AppendTo[primeset,k]]; primeset ]; primeset ] ] (*重要说明,while为当型循环,执行无穷多次,if为判断,只执行一次*)
试除法mathematica程序
(*程序员最忌讳用循环,效率太低了*) DivPrime[n_] := Block[{primeset = {2}, i, j, flag}, If[n == 1, primeset = {}]; For[i = 3, i <= n, i++, flag = True; For[j = 1, primeset[[j]] <= Sqrt[i] && j <= Length[primeset], j++, If[Mod[i, primeset[[j]]] == 0, flag = False; Break[]]]; If[flag == True, AppendTo[primeset, i]]]; primeset] (*第一次改进*) DivPrime1[n_] := Block[{primeset = {2, 3}, i}, For[i = 4, i <= n, i++, If[! MemberQ[Mod[i, primeset], 0], AppendTo[primeset, i]]]; primeset] (*第二次改进,改进后速度大大提高,n取100000没几秒就出来了*) DivPrime2[n_] := Fold[If[! MemberQ[Mod[#2, #1], 0], Append[#1, #2], #1] &, {2, 3}, Range[4, n]] (*总结:能不用循环尽量不用循环,尽可能使用内置函数,多次用到的量要先存起来*)
对比matlab素数判断
function isp = primeornot(X) isp = false(size(X)); if ~isempty(X) X = X(:); if ~isreal(X) || any(X < 0) || any(floor(X) ~= X) || ... any(isinf(X)) error(message('MATLAB:isprime:InputNotPosInt')); end n = max(X); if isinteger(X) || n <= flintmax(class(X)) if (isa(X,'uint64') || isa(X,'int64')) && n > flintmax p = primes(2.^(nextpow2(n)/2)); else p = primes(cast(sqrt(double(n)),class(X))); end for k = 1:numel(isp) Xk = X(k); isp(k) = (Xk>1) && all(rem(Xk, p(p<Xk))); end else fm = flintmax(class(X)); p = primes(sqrt(fm)); for k = 1:numel(isp) Xk = X(k); isp(k) = (Xk<fm) && (Xk>1) && all(rem(Xk, p(p<Xk))); end end end
更快的素数判断和素数求法等着同学们自己去探索了。
相关文章推荐
- 全局eval的实现
- 法国劳动法案引大罢工 一场“无解”的左翼运动
- [PWA] 17. Cache the photo
- Notepad++正则表达式中几点需要注意的地方
- python sorted
- 303. Range Sum Query - Immutable
- notepad++正则匹配及匹配内容的保留与处理
- 浅谈多线程中GCD(有图有真相) iOS中如何实现多线程同步
- 框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结
- 实战SSH端口转发
- equal_range用法
- [leetcode] 【数组】27. Remove Element
- 明明将gson-2.3.1.jar 包复制粘贴在所在工程libs目录下,却无法使用
- 将项目改为MRC的方法(有图有真相)
- Window7下安装openssl完整版(亲测实现)
- kubernates
- Minimum Path Sum
- 大数据学习笔记·城市计算(3)
- [leetcode] 【数组】18. 4Sum
- 自定义控件