求素数个数的优化-LeetCode204
问题
计数质数
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
第一种解法容易想到但是会 超时
class Solution {
public int countPrimes(int n) {
int counter = 0;
for (int i = 2; i < num; i++) {
if (isPrime(i)){
// 是素数 counter++
counter++;
}
}
return counter;
}
// 判断是否是素数
public boolean isPrime(int num){
for (int i=2; i<num;i++){
if(num%i==0){
return false;
}
}
return true;
}
第二种用厄拉多塞筛法
实现原理
他造了一张1到50的素数表,首先写上1到50的所有自然数,然后先划去1,把2留下,再划去其他所有2的倍数,把3留下。再划去其他所有3的倍数,把5留下。又划去其他所有5的倍数……依此类推,可以得到50以内的所有素数。这就是著名的“厄拉多塞筛法”。
public static int countPrimes(int n) {
boolean[] isPrime = new boolean[n];
// 数组中全部设置成true
Arrays.fill(isPrime, true);
for (int i = 2; i * i < n; i++) {
// 如果是素数,排除素数的倍数,因为素数的i倍就一定不是素数, i从2开始
if (isPrime[i]) {
// 让i从i平方开始,减少多余的计算,例如4x2 4x3之前都已经在2x4 3x4计算过了
for (int j = i * i; j < n; j += i) {
isPrime[j] = false;
}
}
}
int count = 0;
for (int i = 2; i < n; i++) {
//最终从2开始计算素数,如果是就++
if (isPrime[i]) {
count++;
}
}
return count;
}
求素数个数的优化-LeetCode204的更多相关文章
- LeetCode Count Primes 求素数个数(埃拉托色尼筛选法)
题意:给一个数n,返回小于n的素数个数. 思路:设数字 k =from 2 to sqrt(n),那么对于每个k,从k2开始,在[2,n)范围内只要是k的倍数的都删掉(也就是说[k,k2)是不用理的, ...
- How many prime numbers(求素数个数)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- leetcode 204题求素数个数
Description: Count the number of prime numbers less than a non-negative number, n 提示晒数法: http:// ...
- 求小于n的素数个数
本文是对 LeetCode Count Primes 解法的探讨. 题目: Count the number of prime numbers less than a non-negative num ...
- POJ 3978 Primes(求范围素数个数)
POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...
- Python3求m以内的素数、求m个数中最小的n个数
[本文出自天外归云的博客园] 题1:求m以内的素数(m>2) def find_all_primes_in(m): def prime(num): for i in range(2, num): ...
- 【Python】求素数-稍加优化
print 'Find prime number smaller then input number \n' print 'Please input a number:' import datetim ...
- Help Hanzo lightof 1197 求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内。r-l<=1e5; 采用和平常筛素数的方法。平移区间即可。
/** 题目:Help Hanzo lightof 1197 链接:https://vjudge.net/contest/154246#problem/M 题意:求一段区间内素数个数,[l,r] 在 ...
- AtCoder Beginner Contest 142【D题】【判断素数的模板+求一个数的因子的模板】
D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us ...
随机推荐
- 学习笔记:斜率优化DP
作为数学渣,先复习一下已知两点\((x_1, y_1)\), \((x_2, y_2)\),怎么求过两点的一次函数的斜率... 待定系数法代入 \(y = kx + b\) 有: \(x_1k + b ...
- 《图解TCP/IP》笔记
OSI参考模型 协议分层 为什么需要分层? 简化网络协议. 每一层只需要衔接上下层的服务. 利于模块化开发. 解耦. 分层的问题 过分模块化.提高数据处理的开销. OSI参考模型 作用及意义 将复杂的 ...
- I/O方式(本章最重要)
目录 程序查询方式 程序查询方式接口结构 例题 本节回顾 程序中断方式 中断的基本概念 工作流程 中断请求 分类 中断请求标记 中断响应 判优实现 优先级设置 中断处理过程 中断隐指令 硬件向量法 中 ...
- 使用pdfobject.js
一.下载pdfobject.js 二.CSS样式 <style type="text/css"> html, body, #pdf_viewer { width: 10 ...
- ECharts的下载和安装(图文详解)
首先搜索找到ECharts官网,点击进入. 找到下载 进入就看到第三步,就点击在线制作 点击进入之后就自己可以选择里面的形状图,就在线制作.最后生成echarts.min.js 点击下载后就会生成js ...
- 工具-绿色使用软件等-破解pycharm,idea等Jet brain出品软件(99.2.1)
1.下载此文件链接:https://pan.baidu.com/s/12nbtgeWiD1xKMtPIr-S1-g密码:b66f 并将 JetbrainsCrack-3.1-release-enc.j ...
- numpy的好处
python是很慢的,因为python在执行代码的时候会执行很多复杂的check功能,比如 b=1; a=b/0.5 这个运算看起来很简单,但是在计算机的内部.b要先从一个整数integer转化成一个 ...
- Networking from the container's point of view 笔记
Networking from the container's point of view Published portsThe type of network a container uses, w ...
- 关于BAPI_ACC_DOCUMENT_POST解读
BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成会计凭证的标准BAPI,这个BAPI可以用到多种场景生成会计凭证,实际项目中一般情况下更多的是生成应收和应付的会计凭证,分别对应客户 ...
- 【故障公告】redis内存耗尽造成博客后台无法保存
非常抱歉,今天上午11:00~11:30左右,由于 redis 服务器内存耗尽造成博客后台故障--保存博文时总是提示"请求太过频繁,请稍后再试",由此给您带来麻烦,请您谅解. 由于 ...