解决Python中回文数和质数的问题-创新互联

一、前言

创新互联建站主营内江网站建设的网络公司,主营网站建设方案,app软件定制开发,内江h5重庆小程序开发搭建,内江网站营销推广欢迎内江等地区企业咨询

今天学习视频时课后作业是找出1000以内既是素数又是回文数的数,写代码这个很容易,结果一运行遇到了bug,输出结果跟预期不一样,调试了快30min,再接着一通搜索和回看视频才发现问题所在。所以特地写下来,方便以后查看。问题的关键是判断素数过程中for…else的用法上(具体看后面代码)

二、实现判断素数的功能

质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。via——Wikipedia

所以采用穷举法只要在2~n-1的区间,没有一个数能整除n,那么n就是素数。

对2-n-1区间进行合理优化,假设x*y=n(x<=y),那么当x和y相等时,x有大值。即x=y=sqrt(n),所以x的区间就可以限制为2~sqrt(n)+1。还有疑问,可以在再多想想,纸上算一算。

因为这里要用到sqrt()方法,所以需要导入math模块。

不多说,直接上代码:

# 求解1000以内的所有素数,正确版本
import math

num = 2
count = 0
list_s = []
max_d = 1000
while num < max_d:
 length = int(math.sqrt(num)+1) # 对遍历范围进行合理优化
 for i in range(2,length): # 注意从2开始
  if num % i == 0:
   break
 else: # 这里的else跟for对齐,而不是跟if,表示只有for顺利执行时,else才执行
  count += 1
  list_s.append(num) # 存入列表
 num += 1
if count == 0:
 print(max_d,'以内没有素数')
else:
 print(max_d,'以内的素数有',count,'个,分别是:',list_s)

名称栏目:解决Python中回文数和质数的问题-创新互联
URL网址:http://scyanting.com/article/hdsjh.html