- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以我能够在互联网的一点帮助下解决这个问题,这就是我得到的:
def isPrime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
但我的问题确实是如何做到这一点,但为什么。我知道 1 不被视为“素数”,即使它是,并且我知道如果它除以范围内的任何内容,它自动不是素数,因此返回 False 语句。但我的问题是平方根“n”在这里扮演什么角色?
附:我非常缺乏经验,一个月前才被介绍编程。
最佳答案
在互联网上流传的许多素数测试中,请考虑以下 Python 函数:
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
# since all primes > 3 are of the form 6n ± 1
# start with f=5 (which is prime)
# and test f, f+2 for being prime
# then loop by 6.
f = 5
while f <= r:
print('\t',f)
if n % f == 0: return False
if n % (f+2) == 0: return False
f += 6
return True
Since all primes > 3是 6n ± 1 的形式,一旦我们消除 n
是:
n%2
)和 n%3
)然后我们可以每 6 个 n ± 1 进行一次测试。考虑素数 5003:
print is_prime(5003)
打印:
5
11
17
23
29
35
41
47
53
59
65
True
r = int(n**0.5)
行的计算结果为 70(5003 的平方根为 70.7318881411,int()
截断此值)
考虑 5005 的下一个奇数(因为除了 2 之外的所有偶数都不是素数),打印出同样的结果:
5
False
限制是平方根,因为 x*y == y*x
该函数只需执行 1 次循环即可发现 5005 可被 5 整除,因此不是素数。由于 5 X 1001 == 1001 X 5
(两者都是 5005),我们不需要在循环中一路走到 1001 就可以知道我们在 5 时知道的内容!
现在,让我们看看你拥有的算法:
def isPrime(n):
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
有两个问题:
n
是否小于2,且不存在小于2的素数;所以:
def isPrime2(n):
if n==2 or n==3: return True
if n%2==0 or n<2: return False
for i in range(3, int(n**0.5)+1, 2): # only odd numbers
if n%i==0:
return False
return True
好的——速度提高了大约 30%(我对其进行了基准测试...)
我使用的算法 is_prime
仍然快了大约 2 倍,因为只有每 6 个整数在循环中循环。 (我再次对其进行了基准测试。)
旁注:x**0.5 是平方根:
>>> import math
>>> math.sqrt(100)==100**0.5
True
旁注 2:primality testing是计算机科学中一个有趣的问题。
关于python - Python 语言的 isPrime 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285534/
请问我的代码中可能存在什么错误,为什么它打印数字而不是仅打印小于 10,000 的质数? public class Isprime { public static void main(Stri
网上有很多问题需要你找质数,所以我决定写一组函数来找它们。我使用 Eratosthenes 筛法 生成素数,因为与其他算法相比,它快速且易于实现。但是,我想知道是不是我的代码而不是我的方法 效率低下。
我构造了两个函数。第一个(不重要但相关,因为它在第二个中被调用)告诉一个数字是否是素数: def is_prime(i): if i == 1: print("prime")
这是一个程序,用于确定 10 个数字的数组中的元素是否为素数。打印时,主要的将被替换为-1,其他保持不变。 这对我来说似乎很好,但是当我用 9 运行代码时,有些会得到 -1,这意味着 9 是素数(错误
('1' * N) !~ /^1?$|^(11+?)\1+$/ 在网上,我找到了一段适用于 N >= 0 的 Ruby 代码,用于确定 N 是否为素数。据我所知,它看起来像是在玩正则表达式,但我不知道
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我大约一个月前开始学习 Java,今天我看到了一道我无法解决的问题。 问题是: Write a method named isPrime, which takes an integer as an a
我是 LISP 的新手,正在解决一些初学者问题。我尝试定义一个 ISPRIME 函数,但它似乎无法正常工作。这是我的代码: (defun ISPRIME (n &optional (d (- n 1
我在下面有一个 isPrime 函数: public static boolean isPrime(int n) { if(n == 1) return false; for(int
这是我的 isPrime 方法: private static boolean isPrime(int num) { if (num % 2 == 0) return false; f
我正在阅读 http://www2.informatik.hu-berlin.de/~weber/slipOff/hashmap_c.html并且很难理解这个函数是如何工作的: static unsi
我正在尝试创建一个基本函数来测试 Haskell 中整数的素数。我的代码可以在特定意义上工作,但是当我尝试将它传递给函数时继续收到错误消息。请注意,我使用 :{ 直接在 GHCi 中编写定义。和 :}
我正在尝试获取一个函数来确定 N 是否为质数。我是 Python 的新手,我知道这可能不是解决这个问题的最有效方法,但这是我的尝试 def is_prime(N): k = []
我正在做一个练习,它要求我使用尾递归在 scala 中实现 isPrime。我确实有一个实现,但是我在生成正确的基本案例时遇到了问题。 所以我的算法涉及检查从 2 到 N/2 的所有数字,因为 N/2
所以我能够在互联网的一点帮助下解决这个问题,这就是我得到的: def isPrime(n): for i in range(2,int(n**0.5)+1): if n%i==
所以,我开始学习编程并尝试使用 java 进行 euler 项目。问题 10 看起来非常简单,我想我可以使用我之前在另一个问题中用来获取素数的方法。问题是,该方法有效,除非我将其放入 for 循环中,
我有一个函数可以测试这个数字是否是质数。 public static boolean isPrime(int number) { if (number == 2) { retu
考虑以下方法: public static boolean isPrime(int n) { return ! (new String(new char[n])).matches(".?|(.
我有一个名为“prime.c”的程序,如下: #include "stdio.h" #include "stdlib.h" #include int isPrime(int number); voi
自然地,对于 bool isprime(number) 会有一个我可以查询的数据结构。 我定义最佳算法,即生成在 (1, N] 范围内内存消耗最低的数据结构的算法,其中 N 是一个常数。 只是我正在寻
我是一名优秀的程序员,十分优秀!