如何用Python编写一个素数环?

Python011

如何用Python编写一个素数环?,第1张

代码: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.copy():#防止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列表排序算法有哪些?本文主要为大家讲述python中经常用的三种排序算法:冒泡排序、插入排序和选择排序。

1、冒泡排序

冒泡排序,Bubble

Sort,是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢浮到数列的顶端。

2、插入排序

插入排序,Insertion

Sort,是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前的扫描过程中,需要把已排序元素逐步向后挪位,为最新元素提供插入空间。

3、选择排序

选择排序,Selection

Sort,是一种简单直观的排序算法。它的工作原理如下:首先在未排序序列中找到最小、最大元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小、最大元素。放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。