素数算法

判断素数

什么是素数

因数是指整数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