正则表达式 - 这个正则表达式用于素数检测的复杂性是多少?

Als*_*ton 6 ruby regex big-o primes time-complexity

这行ruby代码检测素数(太棒了!).

("1" * n) !~ /^1?$|^(11+?)\1+$/   # where n is a positive integer
Run Code Online (Sandbox Code Playgroud)

详细信息请参阅此博客文章http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/

我很好奇它以BIG-O表示法的方式表现.有人帮吗?

tom*_*tom 5

从经验数据看,它似乎是O(n 2).

我在前10000个素数的每100个上运行Ruby代码.结果如下:

图表显示检查数字是否为素数所花费的时间.

蓝点是记录的时间,橙色线是y = 2.9e-9 * x^2.该线完美地拟合数据,表明复杂度为O(n 2).

这是预期的,因为正则表达式检查所有可能的除数,以查看它们中的任何除数是否在字符串中出现了整数次.