首页 新闻 会员 周边

求如何用python判断输入数字是否为素数,我这种方法不知道为什么不行,求大神帮忙。

0
悬赏园豆:10 [已解决问题] 解决于 2020-01-21 21:46

Hoxie的主页 Hoxie | 初学一级 | 园豆:53
提问于:2018-12-16 12:53
< >
分享
最佳答案
2

运用python的数学函数

import math

def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True

单行程序扫描素数

from math import sqrt
N = 100
[ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ]

运用python的itertools模块

from itertools import count
def isPrime(n):
if n <= 1:
return False
for i in count(2):
if i * i > n:
return True
if n % i == 0:
return False

不使用模块的两种方法

def isPrime(n):
if n <= 1:
return False
i = 2
while i*i <= n:
if n % i == 0:
return False
i += 1
return True

def isPrime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
i = 3
while i * i <= n:
if n % i == 0:
return False
i += 2
return True
转自:https://www.cnblogs.com/themost/p/6552198.html

收获园豆:10
半罐水2018 | 菜鸟二级 |园豆:212 | 2018-12-16 13:40

谢谢回答,不过我还是有疑问,我的代码为啥就是不行呢?谢谢啦

Hoxie | 园豆:53 (初学一级) | 2018-12-16 14:04

@Hoxie:1 最后判断因数个数<=2 改成<=1 也许可行;2 这段代码限制范围是在1百万乘以1百万之间

半罐水2018 | 园豆:212 (菜鸟二级) | 2018-12-16 14:11

@Hoxie: 这段代码没有考虑数字1的情况

半罐水2018 | 园豆:212 (菜鸟二级) | 2018-12-16 14:12

@半罐水2018: 1百万乘1百万之间?是1~10**12吗?

Hoxie | 园豆:53 (初学一级) | 2018-12-16 14:19

@Hoxie:
思路理一下,质数是不能被正整数整除的数,
1 用你的思路,一个数如果不是质数,要计算1百万x1百万次=1千亿次,而用除法只用循环1百万次,你的方法效率低
2 你的i_number和j_number的意图是什么?你是想解决出现k=6,i=2,j=3和k=6,i=3,j=2的问题吗?实际是不会出现这种情况的,一旦出现k=i*j时就可以跳出循环打印结果了,i_number和j_number没有意义
3 根据数学逻辑,1000000也不需要的,你需要的应该是i = k / 2 - 1 (偶数)或 (k - 1)/2 (奇数)就可以了
4 看别人给你的建议都是用除法,这也符合质数自身定义的思路。最终理清思路以后,还是自己动手做吧

easy_919 | 园豆:202 (菜鸟二级) | 2018-12-17 17:31

@easy_919: 好的,我大概了解啦,谢谢你啊!

Hoxie | 园豆:53 (初学一级) | 2018-12-19 13:23
其他回答(1)
1

给你个正则就解决了, '^(11+?)\\1+$'

DanBrown | 园豆:1321 (小虾三级) | 2018-12-17 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册