leetcode练习(204) 多种方法求质数 python实现
2017-11-07 19:45
323 查看
题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)
相关文章推荐
- Python多种方法实现句子中单词倒置(好未来2017笔试题)
- Python核心编程多种方法实现过滤filter()
- Python实现二叉树遍历方法(leetcode)
- 运用Python实现多种排序的方法
- C#l练习(用方法来实现:①判断一个给定的整数是否为“质数”。②计算1-100之间的所有质数(素数)的和
- 【LeetCode-面试算法经典-Java实现】【204-Count Primes(统计质数)】
- leetcode练习 532 python实现(字典方式和二分搜索)
- leetcode练习(35,38) python实现
- Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!
- 再谈将C++语言源码转成html的方法(vim实现,可用于java,perl,python等等多种语言)
- 求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法
- python switch语句的多种实现方法
- [LeetCode-204] Count Primes(0~n 有多少个质数—4种方法求解)
- leetcode练习(441,442)python实现
- javascript实现时钟的多种方法
- JS 实现页面刷新的多种方法
- Visual C++中Tab View的多种实现方法
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 多种方法实现超长字符用"....."代替