python.有关素数的合集

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
  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值