栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【算法零基础100讲题解】第七讲 素数判定——基于Python语言

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【算法零基础100讲题解】第七讲 素数判定——基于Python语言

零.写在前面

博主简介:大家好,我是MUSE,一个正在成长的Python博主小白!
博客主页:倒霉沙拉綾
 欢迎关注点赞评论✉️收藏
系列介绍:本系列采用Python语言解决算法零基础100讲题目,相关文章可以关注专栏!

目录
  • 零.写在前面
  • 一.基础知识
  • 二.题目解析
    • 1.回文素数(866)
    • 2.丑数(剑指Offer 49)
  • 三.写在后面

一.基础知识

今天的内容是关于一些素数的判定的,素数的判定离不开我们所学的每一门语言,而且素数的判定也有很多种方法,在介绍素数的判定之前,我们先需要搞定素数的定义;
1.1素数的定义

只能被常数1或自己整除,不能被其他整数整除的正整数。 任何一个正整数,都能被常数1或自己整除。且1不是素数,20以内的素数有[2,3,5,7,11,13,17,19]

1.2素数判定的算法设计

def isPrime(x):
			if x==1:
				return False
			for i in range(2,int(sqrt(x))+1):
				if x%i==0:
					return 	False
			return 	True
二.题目解析
1.回文素数(866)

class Solution:
	def primePalindrome(self,n:int)->int:
		def isPrime(x):
			if x==1:
				return False
			for i in range(2,int(sqrt(x))+1):
				if x%i==0:
					return 	False
			return 	True
		
		def isPalindrome(x):
			x=str(x)
			left=0
			right=len(x)-1
			while left 

解题思路:

1)理解题意,需要我们返回一个比给定的数大的回文素数中最小的;
2)根据题意,拆分理解,先写一个判断素数的程序,今天的重点内容,但只是这道题目的一部分,设计判断素数的方法的时候需要留意时间复杂度。
3)再写一个判断回文数的方法,用了两个指针,分别指向头和尾,判断对应位置的字符是否相等
4)主程序,根据给定的n的值去寻找,需要注意题目中给定的10^8的范围。

2.丑数(剑指Offer 49)

class Solution:
	def nthUglyNumber(self,n:int)->int:
		dp=[1]*n
		a=b=c=0
		for i in range(1,n):
			n2,n3,n5=dp[a]*2,dp[b]*3,dp[c]*5
			dp[i]=min(n2,n3,n5)
			if dp[i]==n2:a+=1
			if dp[i]==n3:b+=1
			if dp[i]==n5:c+=1
		return dp[-1]

解题思路:

1)这道题目使用了动态规划的方法,理解之后还是相对容易一些的;
2)我们的目的是为了找到第n个丑数(按照从小到大的顺序排列),那么每次我们需要排的都是最小的那一个,问题是我们该如何去寻找丑数?
3)我们知道1是一个丑数,因为丑数的因子只有2,3,5,那么之后的丑数也一定只是前一个丑数乘以2,3,5得到的;
4)我们设置三个指针,开始时均指向开头,之后分别跟着对应的因子的最小值去移动,每次放入的是最小值的话就对该指针往前+1;
5)循环结束后返回列表最后一个值即可。

三.写在后面

今天的题目有两道,与素数的判定有一定的相关,但也只是其中很小的一部分,素数的判定是学习语言的必经之路,我们会不断的对其进行优化,今天的题目可以帮助大家更好的理解素数在其中的判断。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号