[204]Count Primes

本文介绍了一种优化后的算法来计算指定非负整数n内有多少个素数,通过改进的筛法避免了传统的直接遍历检查每个数是否为素数导致的时间复杂度高问题。

【题目描述】

Description:

Count the number of prime numbers less than a non-negative number, n.

【思路】

很经典的题目,计算n之内有多少个素数,不过题目有时间要求,一开始用原始做法直接TLE了,现在代码中判断素数的方法是最为经典的,要牢牢记住。

【代码】

class Solution {
public:
    int countPrimes(int n) {
        int cnt=0;
        bool prime[n];
        for(int i=2;i<n;i++){
            prime[i]=true;
        }
        for(int i=2;i*i<n;i++){
            if(!prime[i]) continue;
            for(int j=i*i;j<n;j+=i){
                prime[j]=false;
            }
        }
        for(int i=2;i<n;i++){
            if(prime[i]) cnt++;
        }
        return cnt;
    }
};


先展示下效果 https://pan.quark.cn/s/e81b877737c1 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 执行环境,它使开发者能够在服务器端执行 JavaScript 编程,显著促进了全栈开发的应用普及。 在 Node.js 的开发流程中,`node_modules` 文件夹用于存储所有依赖的模块,随着项目的进展,该文件夹可能会变得异常庞大,其中包含了众多可能已不再需要的文件和文件夹,这不仅会消耗大量的硬盘空间,还可能减慢项目的加载时间。 `ModClean 2.0` 正是为了应对这一挑战而设计的工具。 `ModClean` 是一款用于清理 `node_modules` 的软件,其核心功能是移除那些不再被使用的文件和文件夹,从而确保项目的整洁性和运行效率。 `ModClean 2.0` 是此工具的改进版本,在原有功能上增加了更多特性,从而提高了清理工作的效率和精确度。 在 `ModClean 2.0` 中,用户可以设置清理规则,例如排除特定的模块或文件类型,以防止误删重要文件。 该工具通常会保留项目所依赖的核心模块,但会移除测试、文档、示例代码等非运行时必需的部分。 通过这种方式,`ModClean` 能够协助开发者优化项目结构,减少不必要的依赖,加快项目的构建速度。 使用 `ModClean` 的步骤大致如下:1. 需要先安装 `ModClean`,在项目的根目录中执行以下命令: ``` npm install modclean -g ```2. 创建配置文件 `.modcleanrc.json` 或 `.modcleanrc.js`,设定希望清理的规则。 比如,可能需要忽略 `LICENSE` 文件或整个 `docs`...
### 创建并运行Java程序以计算素数 #### 编写 `CountPrimes.java` 文件 为了实现素数计数功能,首先需要定义一个名为 `CountPrimes` 的类。该类应包含用于判断素数的方法以及主方法来执行逻辑。 ```java public class CountPrimes { public static boolean isPrime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; ++i) { if (num % i == 0) return false; } return true; } public static int countPrimesUpTo(int limit) { int primeCount = 0; for (int n = 2; n <= limit; ++n) { if (isPrime(n)) { ++primeCount; } } return primeCount; } public static void main(String[] args) { try { int upperLimit = Integer.parseInt(args[0]); long startTime = System.currentTimeMillis(); int result = countPrimesUpTo(upperLimit); long endTime = System.currentTimeMillis(); System.out.printf("Found %d primes up to %d\n", result, upperLimit); System.out.printf("Execution Time: %.3f seconds%n", ((double)(endTime - startTime))/1000.0); } catch (NumberFormatException | ArrayIndexOutOfBoundsException ex) { System.err.println("Usage: java CountPrimes <integer>"); } } } ``` 此代码段实现了基本的素数检测算法,并接受命令行参数作为上限值,在范围内查找所有素数的同时记录下开始时间和结束时间以便后续计算执行耗时[^1]。 #### 编写 `PrimeCounter.java` 文件 考虑到题目还提到了另一个文件 `PrimeCounter.java`,假设这个文件可能是用来封装更复杂的业务逻辑或者是测试辅助工具。然而基于当前需求描述,仅需关注上述提到的一个主要处理类即可满足要求;如果确实存在其他特定用途,则可以根据实际应用场景调整设计。 因此在此处不再额外提供第二个源文件的内容,而是集中精力于如何构建批处理脚本来调用编译后的 Java 应用程序。 #### 构建 `timeMeasureTest.bat` 批处理文件 接下来创建一个 `.bat` 文件用于自动化编译和运行前面定义好的 Java 类: ```batchfile @echo off setlocal enabledelayedexpansion :: 设置环境变量指向 JDK 安装路径下的 bin 目录(如果有) if not defined JAVA_HOME ( echo ERROR: JAVA_HOME environment variable is not set. exit /b 1 ) :: 清理旧版本 .class 文件 del *.class 2>nul :: 编译 Java 源代码 "%JAVA_HOME%\bin\javac" CountPrimes.java || goto :error :: 运行 Java 程序并传递参数给它 set "inputNumber=1000" echo Running program with input number=%inputNumber% call "%JAVA_HOME%\bin\java" CountPrimes !inputNumber! goto :end :error echo Compilation or execution failed. :end pause ``` 这段批处理脚本会先清理任何现有的 `.class` 文件以防干扰新编译的结果,接着尝试编译 `CountPrimes.java` 并立即运行生成的应用程序实例,同时传入预设的最大数值范围作为输入参数[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值