2021-11-08(Python) a、输出10-1000之间所有质数 b、将这些质数相乘,输出积的后5位数

Python编程题
a、输出10-1000之间所有质数
b、将这些质数相乘,输出积的后5位数
(20分钟内要写出完整代码,本来是一个很容易的题,第一眼也感觉不难,起码算法明晰;可是没有经过上机实验,光在纸上面写还是差点感觉,忽略了很多东西,现在复盘一下)

求质数的基本算法

质数:除了1和它本身之外不能被其他数所整除
所以只需用该数对2到它本身的所有数循环取余,若所有余数不为0,则为质数。(采用循环,若存在余数为0的情况,break)
以下为基本算法。

#求质数
a=int(input('请输入一个数:'))
for i in range(2,a):
    if a%i==0:
        print('%d不为质数'%a)
        break
else:
    print('%d为质数'%a)

优化求质数基本算法

循环次数可以缩减,可缩减到所求数本身的一半或开更号。
采用开更号的算法

#求质数(优化)
import math
a=int(input('请输入一个数:'))
n=int(math.sqrt(a))
for i in range(2,n+1):
    if a%i==0:
        print('%d不为质数'%a)
        break
else:
    print('%d为质数'%a)

分析题目算法

a.输出10到1000之间的所有质数(算法已解决)
利用一个循环结构循环range(10,1001),再嵌套一个求质数的循环算法

for i in range(10,1001):
    n=int(math.sqrt(i))
    for j in range(2,n+1):
        if(i%j==0):
            break
    else:
        list.append(i)      #使用一个列表保存这些质数

b.将这些质数相乘,输出积的后5位数
(起初并没有思考过数据是否溢出的问题,目前我的掌握程度也不足以让我考虑到这类问题,结果误打误撞居然也没出错,python yyds)
在循环内就计算出所有质数相乘的结果,使用整型数据保存,由于需要输出积的后5位,再将结果的数据类型转换成字符串,利用切片输出后5位。

import math
list=[]  #储存质数的空列表
sum=1
for i in range(10,1001):
    n=int(math.sqrt(i))
    for j in range(2,n+1):
        if(i%j==0):
            break
    else:
        list.append(i)
        sum=sum*i
s=str(sum)    #将相乘所得结果转换成字符串类型
print(list)
print('\n')
print(s)
print('\n')
print(s[-5:])

运行结果:

总结

还有很多东西需要学习,题目确实不难,算法也很明晰,就是在编写过程中要学会拆分目标,一步一步分析完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值