怀旧素数生成器


16

还记得过去的美好时光,因为打开一个简单的文档或网页非常缓慢,因为它占用了计算机的所有微薄资源?而如今,尽管您的处理器速度提高了数百倍,并且可以访问数千倍的内存,但是这样做的速度甚至还要慢?

为了模拟当前文档查看器和类似应用程序中的膨胀效果,编写一个程序,使其在功能更强大的计算机上运行时会出现明显的性能问题

要使每个人都有共同的任务,请使其成为质数生成器

  • 该程序必须打印从2开始的连续素数,每个素数都换行。它应该永远这样做(或直到内存用完)。像这样:
2
3
5
7
11
13
17
  • 在打印每行之间应该有足够的延迟,以使人类可以察觉到。

  • 随着运行程序的计算机变得更快,此延迟应更长。机器速度越快,程序速度越慢。

  • 我不会指定确切的基准,因为它可能会变得很主观,但是如果两台不同机器的性能之间存在显着差异,那么在两台不同机器上的速度应该存在可察觉的差异。

  • 在创建的所有现有机器上,程序的速度不必单调降低。这将很难指定,甚至难以验证。我相信参赛者的常识是什么可以被认为是机器之间明显不同的性能,足以满足要求。

  • 我也不会指定确切的时间上限或下限,但是应该在合理的范围内,因此请不要在打印两行之间间隔几天或几年。

  • 从Eniac到现代,我都不会要求它运行,但是应该足够通用,例如,不允许它仅在两种特定的CPU类型上运行,并且专门检测一种特定的CPU名称。在其上将运行得更快或更慢。

  • 该代码不应依赖编译器或解释器版本。如果在一台速度越来越慢的计算机上都安装了相同版本的编译器/解释器,或者即使二进制/字节码是在一台计算机上编译然后在两台不同的计算机上运行,​​它也应该可以工作。

  • 请解释程序运行方式的原理。由于将难以再现结果,因此答案的有效性可能取决于该方法的可行性。

虽然我希望它能成为一场次比赛,但遗憾的是,此站点不再是“ Programming Puzzles&Code Golf”,而只是“ Code Golf”,因此最短的代码为准。


5
机器速度越快,程序速度越慢。我看不出有一个简单的方法可以使此成为客观,可验证的标准
Luis

1
@LuisMendo:我认为至少有两种方法可以轻松地做到这一点。
vsz 2016年

1
@vsz我看到的问题是再现性。有人说他们在两台计算机上进行了测试,并注意到所需的速度差异很大,但是您无法在两台计算机上重现该行为。那么答案是否有效?
路易斯·门多

1
应该用忙碌的海狸标记吗?
mbomb007

2
您认为什么是“功能更强大的机器”?具有相同规格但更多RAM的计算机是否被认为功能更强大?处理器在一秒钟内运行多少指令?都?还有吗
致命

Answers:


4

Perl,80 78 71字节

-9个字节,感谢@Dada

$_++;`lscpu`=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while$_++

运行命令lscpu并找到以MHz为单位的CPU速度。CPU速度越快,输出之间的睡眠时间就越长,每1 MHz占用1秒。在Ubuntu 14.04.5上运行。在我的特定计算机上,这每800秒(13分钟,20秒)测试一次每个数字。在速度更快的计算机上,这可能会超过50分钟。对其进行更改以sleep$a/400使测试更加理智。


稍稍重新排列代码$_++;即可=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_得到71个字节的lscpu 。
达达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.