相关疑难解决方法(0)

列出N以下所有素数的最快方法

这是我能提出的最佳算法.

def get_primes(n):
    numbers = set(range(n, 1, -1))
    primes = []
    while numbers:
        p = numbers.pop()
        primes.append(p)
        numbers.difference_update(set(range(p*2, n+1, p)))
    return primes

>>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import   get_primes').timeit(1)
1.1499958793645562
Run Code Online (Sandbox Code Playgroud)

可以做得更快吗?

此代码有一个缺陷:由于numbers是无序集,因此无法保证numbers.pop()从集中删除最小数字.然而,它对某些输入数字起作用(至少对我而言):

>>> sum(get_primes(2000000))
142913828922L
#That's the correct sum of all numbers below 2 million
>>> 529 in get_primes(1000)
False
>>> 529 in get_primes(530)
True
Run Code Online (Sandbox Code Playgroud)

python math optimization primes

347
推荐指数
11
解决办法
19万
查看次数

如何在Python中实现有效的素数无限生成器?

这不是作业,我只是好奇.

INFINITE是这里的关键词.

我希望在primes()中使用它作为p.我相信这是Haskell中的内置函数.

所以,答案不能像"Just do a Sieve"那样天真.

首先,您不知道将消耗多少连续素数.好吧,假设你可以一次编制100个.您是否会使用相同的Sieve方法以及素数公式的频率?

我更喜欢非并发方法.

感谢您阅读(和写作;))!

python primes generator

60
推荐指数
5
解决办法
2万
查看次数

递归函数导致堆栈溢出

我正在尝试编写一个简单的筛子函数来计算clojure中的素数.我已经看到了这个关于编写高效的筛分功能的问题,但我不是为了那点呢.现在我只想写一个非常简单(缓慢)的筛子.以下是我的想法:

(defn sieve [potentials primes]
  (if-let [p (first potentials)]
    (recur (filter #(not= (mod % p) 0) potentials) (conj primes p))
    primes))
Run Code Online (Sandbox Code Playgroud)

对于小范围,它工作正常,但导致堆栈溢出大范围:

user=> (sieve (range 2 30) [])
[2 3 5 7 11 13 17 19 23 29]
user=> (sieve (range 2 15000) [])
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

我认为通过使用recur这将是一个非堆栈消耗循环结构?我错过了什么?

recursion primes clojure lazy-evaluation lazy-sequences

38
推荐指数
1
解决办法
2161
查看次数

Python中的简单Prime生成器

请问有人请告诉我这段代码我做错了什么?无论如何,它只是打印'计数'.我只想要一个非常简单的素数发生器(没什么特别的).

import math

def main():
    count = 3
    one = 1
    while one == 1:
        for x in range(2, int(math.sqrt(count) + 1)):
            if count % x == 0: 
                continue
            if count % x != 0:
                print count

        count += 1
Run Code Online (Sandbox Code Playgroud)

python primes

33
推荐指数
7
解决办法
11万
查看次数

解释这一块输出素数流的haskell代码

我无法理解这段代码:

let
  sieve (p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs)
in sieve [2 .. ]
Run Code Online (Sandbox Code Playgroud)

有人可以为我分手吗?我知道它有递归,但这就是问题我无法理解这个例子中的递归是如何工作的.

primes haskell lazy-evaluation

19
推荐指数
3
解决办法
3434
查看次数

用于生成素数的并行算法(可能使用Hadoop的map reduce)

生成素数是一个玩具问题,我经常不时尝试,特别是在尝试新的编程语言,平台或风格时.

我正在考虑尝试使用Hadoop(Map Reduce)编写素数生成算法或素数测试算法.

我想我会发布这个问题,以获得提示,参考,算法,方法.

虽然我的主要兴趣是基于Map Reduce的算法,但我不介意查看新的Hadoop编程模型或者例如查看使用PiCloud

我在Prime数字生成中似乎有一些有趣的问题:这里,这里这里,但没有任何与Parallel方法相关的问题引起了我的注意.

提前致谢.

parallel-processing primes hadoop mpi number-theory

14
推荐指数
1
解决办法
6829
查看次数

Clojure素数懒惰序列

以下Python代码的Clojure等价物(对于精确算法)是什么?

from itertools import count
from math import sqrt

def prime_gen():
   primes = []
   for n in count(2):
       if all(n%p for p in primes if p <= sqrt(n)):
           primes.append(n)
           yield n
Run Code Online (Sandbox Code Playgroud)

python clojure

8
推荐指数
1
解决办法
2868
查看次数

了解 Clojure 中的列表理解修饰符顺序

我目前正在学习 Clojure,并且一直坚持列表理解。

\n
;; /sf/answers/533764521/\n(defn gen-primes "Generates an infinite, lazy sequence of prime numbers"\n  []\n  (letfn [(reinsert [table x prime]\n            (update-in table [(+ prime x)] conj prime))\n          (primes-step [table d]\n            (if-let [factors (get table d)]\n              (recur (reduce #(reinsert %1 d %2) (dissoc table d) factors)\n                     (inc d))\n              (lazy-seq (cons d (primes-step (assoc table (* d d) (list d))\n                                             (inc d))))))]\n    (primes-step {} 2)))\n\n(defn prime-factors-not-working [x]\n  (for [y (gen-primes) \n        :when  (= (mod x y) 0) \n        :while (< y (Math/sqrt …
Run Code Online (Sandbox Code Playgroud)

for-loop list-comprehension clojure

2
推荐指数
1
解决办法
125
查看次数