Python # 有关素数的合集 # 例3-16 判断一个正整数是否是素数 # 除了1和它自身外,不能被其它整数整除的数叫做素数 n = int(input("请输入一个正整数:")) flag = 1 # 设一个标识变量为1,表示为1的时候是素数 for i in range(2,n): # 因为除了1和它自身外,所以不从1开始,也不会到n if n % i == 0: flag = 0 # 若能够整除说明除了1和它自身外,还有其他数,flag赋值为0 break # 不用再循环下一个数,直接跳出来 if flag == 1: print(n,"是素数") else: print(n,"不是素数") # 例3-18 用带有else语句判断是不是素数 # 这里用循环语句中的else,可以避免用标识变量flag,使代码更为简单了 n = int(input("请输入一个正整数:")) for i in range(2,n): if n % i == 0: print(n,"不是素数") break else: print(n,"是素数") # 例3-20 找出300以内的素数 for m in range(2,299+1): for n in range(2,m): if m % n == 0: break # break跳出内层循环,即遇到能整除了,就不再往下了,直接判断下一个数 else: # else对应的是内层循环 print("{:>4}".format(m),end='') # 如果想要知道这之间有多少个素数,需要加一个计数器 c = 0 for m in range(2,299+1): for n in range(2,m): if m % n == 0: break # break跳出内层循环,即遇到能整除了,就不再往下了,直接判断下一个数 else: # else对应的是内层循环 c = c + 1 print("{:>4}".format(m),end='') if c % 10 == 0: # 10个为一行 print("") # 换行 print("\n一共有{}个素数".format(c)) # 例4-4 筛选法求素数(以300以内素数为例) 主要体会一下方法,因为求素数有其他简单的方法 # 通过验证 是否能被已知素数整除 的方法在指定范围内筛选出素数 # 使用长度为300的列表这300个数是连续变化的,与列表索引是一致的,换成其他若是不连续,可能就不行了 # 是素数用1标记,不是素数用0标记 # 把300个数先全部标记为1,即设全部为素数 primes = [1] * 300 primes[0:1+1] = [0,0] for i in range(2,300): # if primes[i] == 1: # 把这个注释掉也没影响,因为上一步都已经给后面都赋为1了 for j in range(i+1,300): if j % i == 0: # primes[j] != 0 and if条件加不加这个也没影响结果 primes[j] = 0 print('300以内的素数包括:') for i in range(2,300): if primes[i]: print(i,end=' ') # 例6-2 # (1)找出 2~100 中所有的素数。 # 我自己写的是直接求一个范围内的所有素数的函数 # 更通用是写一个判断是否是是素数的函数,剩下的可以在函数外面写 # def primes(n1,n2): # c = 0 for i in range(n1,n2+1): for j in range(2,i): if i % j == 0: break else: # c += 1 print(i,end=' ') # if c % 10 == 0: # 设置为每十个换行 # print() a1,a2 = eval(input('请输入一段范围,求这段范围内的所有素数:')) print(primes(a1,a2)) # 请输入一段范围,求这段范围内的所有素数:2,100 # 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 None # 书上例题写的 def primes(n): for i in range(2,n): if n % i == 0: return False else: return True for i in range(2,100): if primes(i) == True: print(i,end=' ') # 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 # (2)找出 2~100 中所有的孪生素数。孪生素数是指相差 2 的素数对,如3和5、5和7、11和13 等 # 思路 # 遍历,可以先找到一个素数,然后判断+2后的数是不是素数,如果是就输出 for i in range(2,100): if primes(i) and primes(i+2) : print(i,i+2) # 3 5 # 5 7 # 11 13 # 17 19 # 29 31 # 41 43 # 59 61 # 71 73 # (3)将4~20中所有的偶数分解成两个素数的和。例如,6=3+3、8=3+5、10=3+7 等。 # 思路 # 遍历偶数,先找到第一个素数,然后用这个 偶数 减去 这个素数,再判断是不是素数 for i in range(4,20+1,2): for j in range(2,i): if primes(j) and primes(i-j): print(i,'=',j,'+', i-j) break # 4 = 2 + 2 # 6 = 3 + 3 # 8 = 3 + 5 # 10 = 3 + 7 # 12 = 5 + 7 # 14 = 3 + 11 # 16 = 3 + 13 # 18 = 5 + 13 # 20 = 3 + 17
python.有关素数的合集
最新推荐文章于 2024-11-13 17:26:18 发布