素数算法
判断素数
什么是素数
因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数
例如:16÷2=8,在这个例子当中,没有余数产生,因此2就是16的因数
什么是素数
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
例如:2,3,5,7,11,13都是素数
判断素数
判断素数

示例
判断素数
因此对于数字N来说,我们可以使用range(1,N+1)来产生这个序列,并让N分别整除这个序列中的每一个数字,如果产生的余数为0,那说明这个数字是N的一个因数
判断素数
number=15 #要判断的数
n=0 #记录因数的个数
for i in range(1,number+1):
if number%i==0:
n+=1
if n>2:
print("不是素数")
else:
print("是素数")

统计素数
统计素数
我们想要知道2-100有哪些数字是素数,这个问题,我们应该如何去解决呢?
统计素数
def prime(x):
number=x #要判断的数
n=0 #记录因数的个数
for i in range(1,number+1):
if number%i==0:
n+=1
if n>2:
return False
else:
return True
list_prime=[] #定义空列表,用于存储素数
#逐个进行判断
for i in range(2,101):
if prime(i):
list_prime.append(i)
#打印结果
print(list_prime)

return是什么东西?
return是什么东西?
return表示返回一个结果
pen=turtle.Pen()
在这个代码中turtle.Pen()这个函数产生了一个结果,也就是一支笔,并把这支笔通过赋值号给了变量pen,这就是一个返回的过程
return是什么东西?
利用return终止函数
def function_one():
for i in range(5):
if i==2:
return
print(i)
function_one()

素数算法的优化(一)
优化一:循环一半
1.我们只需要从2开始,逐步测试到N-1
2.当我们判断到有一个因数,退出循环
优化一:循环一半
def prime(x):
number=x #要判断的数
n=0 #记录因数的个数
for i in range(2,number):
if number%i==0:
return False
return True
list_prime=[] #定义空列表,用于存储素数
#逐个进行判断
for i in range(2,101):
if prime(i):
list_prime.append(i)
#打印结果
print(list_prime)

我们如何知道程序已经优化了?
time库计算运行时间
time库计算运行时间
import time
导入time库
time.time()
获得当前运行的时间
time库计算运行时间
import time #导入time库
start=time.time() #记录开始时间
def prime(x):
number=x #要判断的数
n=0 #记录因数的个数
for i in range(2,number):
if number%i==0:
return False
return True
list_prime=[] #定义空列表,用于存储素数
#逐个进行判断
for i in range(2,5000):
if prime(i):
list_prime.append(i)
#打印结果
print(len(list_prime))
end=time.time() #记录结束时间
print("time:",end-start)
使用案例
time库计算运行时间
优化后的时间
优化前的时间


素数算法优化(二)
素数算法优化(二)
素数算法优化(二)
1.我们只需要计算N的一半即可
例如:对于8来说,只有2,3,4有可能有因数,5,6,7都超过8的一般了,必然会有小数
素数算法优化(二)
import time #导入time库
start=time.time() #记录开始时间
def prime(x):
number=x #要判断的数
n=0 #记录因数的个数
for i in range(2,number//2+1):
if number%i==0:
return False
return True
list_prime=[] #定义空列表,用于存储素数
#逐个进行判断
for i in range(2,5000):
if prime(i):
list_prime.append(i)
#打印结果
print(len(list_prime))
end=time.time() #记录结束时间
print("time:",end-start)

综合练习
综合练习
1.编写程序判断2到100的合数以及统计其个数。
合数:合数可以有多个约数,一般表示除了1和它本身之外还有其他约数的自然数,都称为合数
def composite(x):
number=x #要判断的数
n=0 #记录因数的个数
for i in range(2,number//2+1):
if number%i==0:
return True
return Flase
list_composite=[] #定义空列表,用于存储合数
#逐个进行判断
for i in range(2,101):
if composite(i):
list_composite.append(i)
#打印结果
print(list_composite)
print("number:",len(list_composite))

综合练习
素数算法
By yang he
素数算法
- 381