导航:首页 > 编程语言 > python卢卡斯素数

python卢卡斯素数

发布时间:2023-07-13 01:07:06

‘壹’ python求200以内的素数

# 求200以内的素数
primes = []
for n in range(2,201):
for i in range(2,int(n**(1/2))+1):
if n % i == 0:
break
else:
primes += [n]
print(primes)

程序缩进如图所示

‘贰’ python求素数的个数

求素数本质上的算法还是:除了1和它本身之外的数都不能整除的数。

在网上看到了一种用一行就解决的代码:

" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])
对这段代码分解,最后一段列表生成式[y for y in range(2,x) if x%y == 0]这个就是核心算法y是从2到x-1的数,x只要能对y整除,配上前面的if not,就是,x不能被2到x-1的数整除,再看前面一段,x for x in range(2,100) 其实就是让x从2到100的取值。我们这假设题目就是求100内的素数。其实代码到这就得出结果了,只要在这些代码外面加上[]就是一个列表生成式了:

[x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0]]
那么为什么还加上了" ".join("%s" % 。。。)这段代码呢?其实只是格式化美观罢了,"%s" %是一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中,join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
下面是结果:

'2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97'
这样解析出来是个字符串还不能分割,所以我重新改了一下:

a = (" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])).split()
list1 = []
for item in (a):
list1.append(int(item))
print(list1)
split()把字符串解析成列表,然后给列表每一项都转化成数字。
在数学里,我们还有种判断素数的简化方法:即y的取值范围是2到x的平方根+1

import math
(" ".join("%s" % x for x in range(2,100) if not [y for y in range(2, int(math.sqrt(x))+1) if x%y == 0])).split()
下面是一种正常的算法:
import math
num = []
i = 2
for i in range(2,100):
j = 2;
for j in range(2,int(math.sqrt(i)+1)):
if (i%j==0):
break;
else:
num.append(i)
print(num)

阅读全文

与python卢卡斯素数相关的资料

热点内容
图片怎么压缩到10k 浏览:993
幻塔悯雨岛是什么渠道的服务器 浏览:526
51单片机控制液晶屏 浏览:876
单片机线性输出 浏览:413
android40设计规范 浏览:163
mc命令方块变大 浏览:997
rpgxp手机编程工具 浏览:331
小米电视4谷歌服务器地址 浏览:593
复杂驱动程序编译 浏览:501
西门子数控车床编程指令 浏览:615
华为手机电池有没有加密 浏览:221
域名查询被墙源码 浏览:678
电脑文件夹压缩包格式 浏览:67
安卓堆糖怎么保存 浏览:358
multisim中单片机 浏览:603
加密电梯卡怎么复制到苹果手机上 浏览:304
php获取数据类型 浏览:915
新概念c51单片机 浏览:326
删除文件的命令行 浏览:981
java编程软件eclipse 浏览:198