小编lya*_*per的帖子

为什么pow(a,d,n)比**d%n快得多?

我试图实施Miller-Rabin素性测试,并且很困惑为什么中等数字(~7位数)需要这么长时间(> 20秒).我最终发现以下代码行是问题的根源:

x = a**d % n
Run Code Online (Sandbox Code Playgroud)

(where a,dn都是相似的,但是不相等的,中等数字,**是取幂运算符,并且%是模运算符)

然后我尝试用以下内容替换它:

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)

python performance pypy

110
推荐指数
3
解决办法
1万
查看次数

Go的Vim makeprg和errorformat

如果存在编译错误,我希望能够在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程序,在缓冲区下面有漂亮的错误报告和输出?

vim go

6
推荐指数
1
解决办法
2426
查看次数

标签 统计

go ×1

performance ×1

pypy ×1

python ×1

vim ×1