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:])
运行结果:
总结
还有很多东西需要学习,题目确实不难,算法也很明晰,就是在编写过程中要学会拆分目标,一步一步分析完成。