leetcode练习(204) 多种方法求质数 python实现
来源:互联网 发布:Windows wifi 登录 编辑:程序博客网 时间:2024/06/05 19:00
题204
题目要求是求所有小于n的质数的个数。
求质数方法1:
穷举法:
根据定义循环判断该数除以比他小的每个自然数(大于1),如果有能被他整除的就不是质数:
def countPrimes1(self, n): """ :type n: int :rtype: int """ if n<=2: return 0 else: res=[] for i in range(2,n): flag=0 # 质数标志,=0表示质数 for j in range(2,i): if i%j ==0: flag=1 if flag==0: res.append(i) return len(res)
求质数方法2:
利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。所以判断一个数是否是质数,只需判断它是否能被小于它开根后的所有数整除。这样做的运算会少很多。
def countPrimes2(self, n): if n<=2: return 0 else: res=[] for i in range(2, n): flag=0 for j in range(2, int(math.sqrt(i))+1): if i % j == 0: flag = 1 if flag == 0: res.append(i) return len(res)
求质数方法3:
利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。我们可以发现只要尝试小于等于平方根的所有数即可。列举从 3 到根号x的所有数,还是有些浪费。比如要判断101是否质数,101的根号取整后是10,需要尝试的数是1到10。但是可以发现,对9的尝试是多余的。不能被3整除,必然不能被9整除……顺着这个思路走下去,其实,只要尝试小于根号x的质数即可。而这些质数,恰好前面已经算出来了,已经存在res中了。
def countPrimes3(self, n): if n <= 2: return 0 else: res = [] for i in range(2, n): flag = 0 for j in res: if i % j == 0: flag = 1 if flag == 0: res.append(i) return len(res)
阅读全文
0 0
- leetcode练习(204) 多种方法求质数 python实现
- 质数(或素数)(多种方法)
- Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!
- Python求1000以内质数(素数)
- python 案例010(求质数)
- python求质数
- leetcode练习(441,442)python实现
- 求质数的方法
- 求质数的方法
- leetcode练习(686) python实现
- c实现的求质数几种方法总结
- python练习1 质数分解
- 使用python做求质数
- 利用python代码求质数
- python switch语句的多种实现方法
- 运用Python实现多种排序的方法
- 多种方法求平均数
- python实现-质数因子
- 数学笔记17——定积分的应用2(体积)
- Effective java
- Java自学笔记之深入理解struts.xml和常用配置
- 1.Mybatis基本环境搭配
- 程序员伤不起的 30 岁
- leetcode练习(204) 多种方法求质数 python实现
- 1121. Damn Single (25)(单身狗)
- ELKB安装记录
- 二分法与快排结合(2)
- java三大特性
- nginx利用第三方模块nginx_upstream_check_module来检查后端服务器的健康情况
- SteamVR 插件脚本详解
- 嵌套循环
- VS 2010 如何显示行号 图文