Python:检查特定数字是否为质数
Python: To check if a particular number is a prime number
我是 Python 的初学者。
请帮助获得正确和准确的代码;我试图直接将以下数学语句直接翻译成 Python 术语:
let Q = [2,...,n-1] if there exist p,q ∈ Q | pq = n, then n is not a prime number
where n is any integer I want to check if it's prime or not
这是我的 python 代码,我尝试使用 random.randint()
浏览列表,我得到了错误的结果(它检查一个数字,但 returns 所有正整数都是质数数)
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
else:
print('%d is a prime number ! :-)'%anumber)
primechecker(12)
你的问题是你只检查一组 p
和 q
,所以如果你很幸运你只会得到 "not a prime number"
输出和 p*q
刚好等于 anumber
第一次去。
大多数非常简单的素数检查器的工作方式是在 0 和测试数的平方根之间顺序,对于 p 和 q,排除所有可能的因素。虽然有 loads of other ways 检查主要性。
不过,因为电脑速度很快,所以你可以保留随机选择,试几千次就可以了,对于小的数字,你很可能是正确的!妥善度过还是最好的办法。
(免责声明 - 这不是真正的解决方案,只是以更正确的方式使用 random
的示例)
我已经在您的代码中添加了一个 for 循环,如果它找到一个匹配项,它将打印然后从函数中提前执行 return,或者如果它仍然没有找到匹配项10000 次随机尝试,说这可能是素数。
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is maybe a prime number ! :-)'%anumber)
primechecker(70)import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is probably a prime number ! :-)'%anumber)
primechecker(70)
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is probably a prime number ! :-)'%anumber)
primechecker(7)
primechecker(99)
primechecker(90)
在这里试一试 -> https://repl.it/@LukeStorry/63038315
如您所见,对于较大的数字不是很准确,方法是不使用随机,而是按顺序进行,但如果您正在学习,这是一个很好的尝试 python.
我希望你知道它通常是如何完成的,即遍历 2
到 n-1
并检查数字是否可以被范围内的任何数字整除。
现在,为了实现质数的陈述,random
并不是一个真正的解决方案,你可能需要等待很长时间才能得到匹配,如果有的话,当有匹配不上,除了将所有先前的猜测存储在某个地方外,几乎没有其他方法可以判断。
所以你可以做一件事,尝试使用 itertools.combinations
:
获取范围内 p
和 q
的所有组合
from itertools import combinations
def primechecker(number):
if number <= 1: return "Please enter number > 1"
for p, q in combinations(iterable=range(2,number), r=2):
if p*q == number:
return f"Not prime. {p} * {q} = {number}"
else:
return "Prime"
现在检查:
>>> primechecker(1)
'Please enter number > 1'
>>> primechecker(15)
'Not prime. 3 * 5 = 15'
>>> primechecker(17)
'Prime'
我是 Python 的初学者。 请帮助获得正确和准确的代码;我试图直接将以下数学语句直接翻译成 Python 术语:
let Q = [2,...,n-1] if there exist p,q ∈ Q | pq = n, then n is not a prime number
where n is any integer I want to check if it's prime or not
这是我的 python 代码,我尝试使用 random.randint()
浏览列表,我得到了错误的结果(它检查一个数字,但 returns 所有正整数都是质数数)
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
else:
print('%d is a prime number ! :-)'%anumber)
primechecker(12)
你的问题是你只检查一组 p
和 q
,所以如果你很幸运你只会得到 "not a prime number"
输出和 p*q
刚好等于 anumber
第一次去。
大多数非常简单的素数检查器的工作方式是在 0 和测试数的平方根之间顺序,对于 p 和 q,排除所有可能的因素。虽然有 loads of other ways 检查主要性。
不过,因为电脑速度很快,所以你可以保留随机选择,试几千次就可以了,对于小的数字,你很可能是正确的!妥善度过还是最好的办法。
(免责声明 - 这不是真正的解决方案,只是以更正确的方式使用 random
的示例)
我已经在您的代码中添加了一个 for 循环,如果它找到一个匹配项,它将打印然后从函数中提前执行 return,或者如果它仍然没有找到匹配项10000 次随机尝试,说这可能是素数。
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is maybe a prime number ! :-)'%anumber)
primechecker(70)import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is probably a prime number ! :-)'%anumber)
primechecker(70)
import random
def primechecker(anumber):
if anumber <= 1:
print('1 is not a prime number, \n*2Input a positive integer greater than 1')
for _ in range(10000):
p = random.randint(2,anumber)
q = random.randint(2,anumber)
if p*q==anumber:
print('%d is not a prime number'%anumber)
return
print('%d is probably a prime number ! :-)'%anumber)
primechecker(7)
primechecker(99)
primechecker(90)
在这里试一试 -> https://repl.it/@LukeStorry/63038315
如您所见,对于较大的数字不是很准确,方法是不使用随机,而是按顺序进行,但如果您正在学习,这是一个很好的尝试 python.
我希望你知道它通常是如何完成的,即遍历 2
到 n-1
并检查数字是否可以被范围内的任何数字整除。
现在,为了实现质数的陈述,random
并不是一个真正的解决方案,你可能需要等待很长时间才能得到匹配,如果有的话,当有匹配不上,除了将所有先前的猜测存储在某个地方外,几乎没有其他方法可以判断。
所以你可以做一件事,尝试使用 itertools.combinations
:
p
和 q
的所有组合
from itertools import combinations
def primechecker(number):
if number <= 1: return "Please enter number > 1"
for p, q in combinations(iterable=range(2,number), r=2):
if p*q == number:
return f"Not prime. {p} * {q} = {number}"
else:
return "Prime"
现在检查:
>>> primechecker(1)
'Please enter number > 1'
>>> primechecker(15)
'Not prime. 3 * 5 = 15'
>>> primechecker(17)
'Prime'