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)] ]
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
谢谢回答,不过我还是有疑问,我的代码为啥就是不行呢?谢谢啦
@Hoxie:1 最后判断因数个数<=2 改成<=1 也许可行;2 这段代码限制范围是在1百万乘以1百万之间
@Hoxie: 这段代码没有考虑数字1的情况
@半罐水2018: 1百万乘1百万之间?是1~10**12吗?
@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: 好的,我大概了解啦,谢谢你啊!
给你个正则就解决了, '^(11+?)\\1+$'