23

作为圣诞礼物,我用 Java 编写了一个小程序来计算素数。我的意图是让它通宵达旦,计算下一个素数并将其写入 .txt 文件。早上我会终止程序并将 .txt 文件带给我的朋友过圣诞节。

有什么我应该担心的吗?请记住,这是您正在与之交谈的真正的初学者 Ziggy,而不是一些聪明的错误检查 ASM 家伙。

编辑更具体地说,因为我将在整个晚上计算素数时离开这个程序,我是否有可能遇到某种与内存相关的错误?像,堆压成堆或狗和猫睡在一起?

编辑更具体地说,当文件大小为 4GB 时,我可以输入一行代码来停止打印行吗?只是为了安全?

编辑:成功:整夜离开后,我得到的素数不超过 13 KB,我得到的最高值是 22947217,这就像数万个素数。成功!

4

11 回答 11

17

我建议为您计算的每个素数发送一条短信。你的朋友比一堆纸更想要那个。另外,他可以更频繁地更新。

于 2008-12-24T16:51:28.937 回答
8

有很多限制,尽管它们都不是 .txt 文件所固有的:

  • Windows 9x 记事本不会打开大于 64KB 的文件。
  • Windows NT/2k/etc 的记事本没有限制,但往往会阻塞和锁定数兆字节的文件。您还需要记住,大多数文本编辑器都是愚蠢的,并试图将整个文件读入 RAM。
  • 许多软件被限制为 2GB 或 4GB 文件,具体取决于它们使用有符号整数还是无符号整数——因为有人已经提到 FAT32 有罪。
于 2008-12-24T16:56:40.640 回答
7

您很可能正在使用缓慢的算法。随着素数变大,您的程序将花费越来越长的时间来计算单个素数。如果你让它在晚上运行,那么早上的文本文件不会很大。如果它超过几兆,我会印象深刻。

于 2008-12-24T17:23:42.850 回答
2

从技术上讲,除了文件系统对您的限制之外,没有任何限制。然而,记事本对于打开非常大的文件真的很不耐烦。

于 2008-12-24T16:51:15.533 回答
2

您可能会考虑跟踪写入每个文件的字节数,并在达到一定字节数后切换到新文件。您还可以为您的文件提供查看器,以便您的朋友可以更轻松地看到他的礼物。:)

于 2008-12-24T16:53:52.223 回答
1

如果没有记忆,FAT32 的文件大小限制为 4gig。

于 2008-12-24T16:53:05.827 回答
1

齐格——

我喜欢这个:“不是一些聪明的错误检查 ASM 家伙。” 你在描述我们所有人!

有足够的磁盘空间并写掉!如前所述,确保用于打开文件的编辑器可以打开非常大的文件。

节日快乐,真正的初学者 Ziggy。

于 2008-12-24T16:54:46.637 回答
0

仅关于您在磁盘上存储文本文件的位置的大小。

而且,如果你没有马上写,你的内存+虚拟内存。

于 2008-12-24T16:49:10.093 回答
0

节省一些 CPU 周期并下载预先计算的素数列表怎么样?还是更“重要的想法”?:)

于 2008-12-24T16:59:49.807 回答
0

为每个质数创建一个文件,然后使用文件名显示数字怎么样?

于 2008-12-24T17:15:28.607 回答
0

不知何故,我怀疑当你的程序在一夜之间运行时,文件大小是否会成为问题,因为随着数字变大,找到素数需要更长的时间。只要确保清理干净,否则您可能会耗尽所有 RAM。

回答您的问题:理论上,文件系统会限制文件大小。然而,许多文本编辑器在加载大文件(> 100 MB)时会崩溃(vim 不会),因为它们试图将其放入一个缓冲区中。

总而言之,考虑将文件分成最弱链接(文本编辑器)可以处理的块。

于 2008-12-25T21:14:00.417 回答