1
7
您的算法本身可能是通过pythonical实现的,但是以功能性的方式重新编写算法通常是有用的——您最终可能会得到一个完全不同但可读性更高的解决方案(这甚至更像pythonic)。
用途:
或者,考虑到Alasdair的评论,更有效的版本:
|
2
6
给定的代码不是很有效。替代解决方案(同样效率低下): γ
此代码使用
它引入了另外两个功能,即
γ :更有效的方法是使用 Sieve of Eratosthenes . |
3
5
一些小事情从 style guide .
n ==2:
= & gt;
n == 2:
currentnumber
= & gt;
current_number
|
4
2
首先,不应将max赋给变量,因为它是用于从iterable中查找最大值的内置函数。而且,整个代码段可以写成
此外,您可以直接执行以下操作,而不是定义新的变量结果并将isprime返回的值放入其中。
|
5
2
我最近发现 Project Euler solutions in functional python 它有一些很好的例子,像这样处理素数。 Number 7 非常接近你的问题:
|
6
1
通常情况下,不使用while循环进行类似的简单操作。您宁愿创建一个范围对象并从中获取元素。因此,您可以将第一个循环重写为这个循环,例如: for i in range( 3, int( sqrt( n ) ) + 1, 2 ): if n % i == 0: return False
如果你缓存你的质数,并且在检查一个新的质数时只检查以前的质数,那会更好。这样可以节省很多时间(并且可以很容易地用这种方法计算更大的素数)。这是我以前写的一些代码,可以使所有的素数达到
def primeNumbers ( end ): primes = [] primes.append( 2 ) for i in range( 3, end, 2 ): isPrime = True for j in primes: if i % j == 0: isPrime = False break if isPrime: primes.append( i ) return primes print primeNumbers( 20 ) |
7
1
翻译自 stacktrace.it (特别是Daniele Varrazzo),这个版本利用了 a binary min-heap 要解决此问题:
这个代码不是我的,我不完全理解( but the explaination is here :)),所以我将这个答案标记为社区wiki。 |
8
1
你可以用筛子算法使它更像蟒蛇(所有素数都小于100):
一个很小的诀窍就能把它变成你的目标。 |
Fusionist · 素数逻辑,循环中的n/2条件 7 年前 |
Milad · JavaScript中的素数 7 年前 |
distro · 具有流控制的嵌套列表理解 7 年前 |
Renee · 打印所有小于50的素数[重复] 7 年前 |
marcosh · Idris-定义素数类型 7 年前 |
Marcus · 在Python中查找素数 7 年前 |
AmR · Python使用count()初始化迭代器 7 年前 |
Hanzy · 对于循环,语法错误:无法分配给函数调用[closed] 7 年前 |