输出一亿内的素数至文本文件,花了三十多秒。。。。
mathematica吧
全部回复
仅看楼主
level 5
Timing[
str = OpenWrite["Prime within 10^8.txt"];
Do[Write[str, Prime[x]], {x, PrimePi[10^8 ]}];
Close[str]]
感觉还是慢了一点,怎么提速?
2015年10月10日 13点10分 1
level 1
primes[n_] := Module[{p = Range[1, n, 2]}, p[[1]] = 2;
Do[If[p[[(k + 1)/2]] != 0, p[[(k^2 + 1)/2 ;; -1 ;; k]] = 0], {k, 3,
n^.5, 2}]; SparseArray[p]["NonzeroValues"]];
str = "C:\\Users\\chen\\Desktop\\rime within 10^8.txt";
BinaryWrite[str, primes[10^8], "Integer32"] // AbsoluteTiming
Close[str];
BinaryReadList[str, "Integer32"] // Length // AbsoluteTiming
BinaryReadList[str, "Integer32"] == primes[10^8]
部分代码抄自@妙谛莲花,可以看到二进制存储写入写出文件几乎没花时间。二进制文件只是无法用txt打开文件。不过至少c++是支持二进制文件读取写入的。所以可以考虑一下二进制文件。
2015年10月10日 15点10分 3
level 5
用Export然后格式用List可以一行一个……但是输出很慢……
2015年10月13日 16点10分 4
level 8
你花掉的时间是用来把数字转换成10进制文本了
2015年10月16日 02点10分 5
1