python循环素数
① python循环素数
#!/usr/bin/python
#encoding:utf-8
importtime
importpprint
defallPrime(maxNum):
aList=range(0,maxNum)
def_do(aPrime):
foriinxrange(aPrime,maxNum,aPrime):
aList[i]=0
returnaPrime
returnmap(_do,
(iforiinxrange(2,maxNum)ifaList[i])
)
t0=time.time()
LIMIT=1000000
primelist=allPrime(LIMIT)
primesets=set(primelist)
defloopshift(num):
numlst=list(str(num))
result=list()
foriinrange(len(numlst)):
x=int(''.join(numlst[i:]+numlst[:i]))
ifxnotinprimesets:
returnNone
result.append(x)
result=sorted(set(result))
forxinset(result):
primesets.remove(x)
returnresult
found=list()
fornuminprimelist:
xn=loopshift(num)
ifxnandxnnotinfound:
found.append(xn)
pprint.pprint(found)
print"Processusage",time.time()-t0
>python -u ".py"
[[2],
[3],
[5],
[7],
[11],
[13, 31],
[17, 71],
[37, 73],
[79, 97],
[113, 131, 311],
[197, 719, 971],
[199, 919, 991],
[337, 373, 733],
[1193, 1931, 3119, 9311],
[3779, 7793, 7937, 9377],
[11939, 19391, 39119, 91193, 93911],
[19937, 37199, 71993, 93719, 99371],
[193939, 391939, 393919, 919393, 939193, 939391],
[199933, 319993, 331999, 933199, 993319, 999331]]
Process usage 0.953225135803
>Exit code: 0 Time: 1.033
② python判断素数是什么
判断是否为素数的方法:
1、利用for循环和break语句,代码为【for i in range(2, k+2):if m % i == 0:break】。
2、利用while循环和bool变量。
python使用技巧
如果在异常处理程序或 finally 块中引发异常,默认情况下,异常机制会隐式工作会将先前的异常附加为新异常的 __context__ 属性。这就是 Python 默认开启的自动关联异常上下文。
如果你想自己控制这个上下文,可以加个 from 关键字( from 语法会有个限制,就是第二个表达式必须是另一个异常类或实例。),来表明你的新异常是直接由哪个异常引起的。
③ python中用while循环计算100到10000的素数
素数的计算方法有很多种。
最朴素的办法是,用所有小于n但大于1的整数去除n,如果均不能除尽,那么,n就是素数。这就是筛法的核心。
进一步,除了2之外,所有素数都是奇数,那么,用于试商的可以只用小于n但大于1的奇素数,并且只对奇数进行试商。
再进一步,如果一个数n可以分解为两个因数相乘,那么,至少其中一个因数是不大于n的平方根的,所以,我们可以对奇数n用不小于n的平方根但大于1的奇素数去试商。
到这一步,已经可以用来对一个比较小的数进行进行“是否是素数”的检查了。麻烦的只是需要建立一个素数表,记录从小到大我们找到的每一个素数。
参考以下代码:
素数计算
筛法还有更高的应用方式,比如while中对i不是每次加而是每次加素数表前若干个数的积,如6,30,210中的某一个。(2是第一个素数)这种需要更多的控制,实现复杂,对速度的提升远没有只对奇数试商和只用平方根以下的素数试商的提升大。
除了筛法以外,还有其它的方式去判断一个数是不是素数,这里就不罗列了。
对于这道练习题,会筛法就足够了,想进一步提升,你可以在上图给出的方法的基础上尝试用步长为6的循环来做,如果做到了,那么步长为30或更大的就只是体力活了。
④ Python使用遍历循环for输出2~500之间的所有素数,每个素数之间用跳格键分开 急!
##python算法题:输出2~100之间的素数
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;
elif (j-1)==i:
print ('{}是素数'.format(j))
例如:
k = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
for i in range(100, 998):
if (i % 10 + i % 100 // 10) % 10 == (i // 100):
for m in k:
if i % m == 0:
break
if m ==31:
print(i)
(4)python循环素数扩展阅读:
Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,NET是一致的。
Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。
⑤ 用for循环求100以内的素数python
按照你的要求编写的Python程序如下(输出每5个一行)
import math
count=1
for i in range(2,100):
for j in range(2,int(math.sqrt(i))+1):
if i%j==0:
break
else:
if count%5==0:
print(i)
else:
print(str(i)+" ",end='')
count+=1
源代码(注意源代码的缩进)
⑥ 如何用Python编写一个素数环
代码:
n = int(input("请输入最大数n:"))
lists = [[1]]#多个素数环
surplusnum = list(range(1,n+1)) #剩余的数
def sumisprime(x, y):
#x与y之和是否是素数
isprime=True#是否是素数
s = x + y#和
for i in range(2, int(s**0.5)+1):
#素数判定法:从2开始直到此数的开方内的整数都不能被该数整除,则此数为素数
if s%i == 0:#能被整除
isprime = False#不是素数
break#跳出循环
return isprime#返回后否是素数(是:True,否:False)
changelast=lambda listx,addvalue:listx[0:-1]+[addvalue]#改变列表末尾的函数
while len(lists[0] if len(lists) else [0]*n) < n:#当素数环长度小于最大数时
n2 = len(lists[0]) #n2为判定,理论当前列表长度最大值
for listn in lists:#遍历各个可能的素数环
surplusnum=list(range(1,n+1))#默认值
for j in listn:#遍历当前列表的数
surplusnum.remove(j)#剩余的数中删除此数
for i in surplusnum:#遍历剩余的数
if sumisprime(listn[n2-1], i):#最后一个数与它的和是素数
if len(listn) == n2:#如果现在这个列表是没有被添加过的
listn.append(i)#增加在这个列表
else:#如果该列表已经被添加过
lista = changelast(listn, i)#要加入的列表
if lista not in lists:#如果不在这个列表里
lists.append(lista)#添加到另一个列表
for listn in lists.():#防止lists被删造成影响
if len(listn) != n2+1:#如果长度没有达到预期(+1)
lists.remove(listn)#删除该列表(取消此可能性)
if len(lists[0]) == n:#已经符合条件
for listn in lists:#遍历列表,检查首尾
if sumisprime(listn[-1], listn[0]):#如果首尾相加等于素数
print(listn)#环成立,打印出来
break#结束循环
说明:经试验,都没什么问题,n=12也能很快运算完(但我劝你不要打出来),如果你只需要1个素数环,可以把break的缩进调到print(listn)并列。
⑦ Python 素数
i = 2
while i <= 100:
j = 2
while j <= i / j: #难点1
if i % j == 0:
break #如果提前提出,j的值<= i / j
j = j + 1
if j > i / j: #难点2
print(i, end=' ')
i = i + 1
其实代码每一句都很简单,就不一一注释了,其实难的是思路。主要是两个地方对J变量的判断
A:while循环,一种常见的是j<=sqrt(i),用这个数的开方(根号)来指定搜索上限,这是因为:
一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n)——所以只要搜索到根号的地方就可以了,提高了速度。
用i/j的方式是sqrt的一种变种,j<=sqrt(i),由于i>j>1,两边平方后不等式仍然成立
j^2<=i
两边除以j就变成了j
<=
i
/
j
B:第二处,根据j的数值来判断i是否是素数。当在循环中找到i
%
j
==
0的情况,循环会提前退出,导致j
< i
/
j——说明不是素数;如果循环没有提前退出,说明i是素数,这时j的值>
i
/
j
⑧ python使用while循环输出2到100之间的素数
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;
elif (j-1)==i:
print ('{}是素数'.format(j))
⑨ python用while输出2到100的素数
这个问题我们这也有学生提过,其实挺简单,看我写代码
##python算法题:输出2~100之间的素数
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;elif (j-1)==i:
print ('{}是素数'.format(j))
⑩ python中如何编程求1到100之间的素数
1、新建python文件,testprimenum.py;