我试图实施Miller-Rabin素性测试,并且很困惑为什么中等数字(~7位数)需要这么长时间(> 20秒).我最终发现以下代码行是问题的根源:
x = a**d % n
Run Code Online (Sandbox Code Playgroud)
(where a
,d
和n
都是相似的,但是不相等的,中等数字,**
是取幂运算符,并且%
是模运算符)
然后我尝试用以下内容替换它:
x = pow(a, d, n)
Run Code Online (Sandbox Code Playgroud)
相比之下它几乎是瞬间完成的.
对于上下文,这是原始函数:
from random import randint
def primalityTest(n, k):
if n < 2:
return False
if n % 2 == 0:
return False
s = 0
d = n - 1
while d % 2 == 0:
s += 1
d >>= 1
for i in range(k):
rand = randint(2, n - 2)
x …
Run Code Online (Sandbox Code Playgroud) 如果存在编译错误,我希望能够在vim内构建和运行Go代码并访问quickfix窗口.
为了通过Java实现接近这一点,我将以下内容添加到我的.vimrc中:
autocmd Filetype java set makeprg=ant\ -find\ build.xml
autocmd Filetype java set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
Run Code Online (Sandbox Code Playgroud)
我目前在我的.vimrc中有以下内容:
autocmd Filetype go set makeprg=go\ run
Run Code Online (Sandbox Code Playgroud)
我可以做什么:make
(或:make %
)像一个好的'ol C程序,在缓冲区下面有漂亮的错误报告和输出?