当前位置: 首页 > news >正文

算法练习(八)计数质数(素数)

1、问题描述: 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

2、示例如下:
在这里插入图片描述
3、代码如下:

第一种:比较暴力的算法

class Solution {public int countPrimes(int n) {int count=1;if(n<=2) return 0;for(int i=3;i<n;i+=2){boolean isPrime=true;for(int j=3;j<=Math.sqrt(i);j+=2){	//一一排除if(i%j==0)isPrime=false;}if(isPrime)count++;}return count;}
}

第二种:埃氏筛

class Solution {public int countPrimes(int n) {int[] isPrime = new int[n];Arrays.fill(isPrime, 1);	//初始填充int ans = 0;for (int i = 2; i < n; ++i) {if (isPrime[i] == 1) {	//等于1表示是质数ans += 1;if ((long) i * i < n) {for (int j = i * i; j < n; j += i) {	//把小于n的从2开始的各种质数的倍数标0,当遍历完成后,数量也就出来了isPrime[j] = 0;		}}}}return ans;}
}

第三种:线性筛(核心原理是在埃氏筛的基础上不重复标记)

class Solution {public int countPrimes(int n) {List<Integer> primes = new ArrayList<Integer>();int[] isPrime = new int[n];Arrays.fill(isPrime, 1);for (int i = 2; i < n; ++i) {if (isPrime[i] == 1) {primes.add(i);}for (int j = 0; j < primes.size() && i * primes.get(j) < n; ++j) {isPrime[i * primes.get(j)] = 0;if (i % primes.get(j) == 0) {break;}}}return primes.size();}
}
http://www.lryc.cn/news/22744.html

相关文章:

  • 用反射模拟IOC模拟getBean
  • 【Ap AutoSAR入门与实战开发02】-【Ap_s2s模块01】: s2s的背景
  • C语言数据结构(3)----无头单向非循环链表
  • Android 实现菜单拖拽排序
  • 通过window.open打开新的页面并修改样式添加内容
  • Java中 Synchronized 的用法
  • Rust语言的基本介绍
  • 新冠小阳人症状记录
  • SQL零基础入门学习(十四)
  • Excel工作表不能移动或复制?看看是不是这两个原因
  • 利用递归实现括号匹配
  • 14.线程数量怎么制定?
  • C++中STL标准模板库学习记录
  • 《数据库系统概论》学习笔记——第六章 关系数据理论
  • Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发
  • 搜广推 NeuralCF - 改进协同过滤+矩阵分解的思想
  • dbever连接kerberos认证的hive
  • pom依赖产生的各种问题
  • RPC编程:RPC框架设计目标
  • RBAC 权限模型介绍
  • 西电面向对象程序设计核心考点汇总(期末真题)
  • 判断一个用字符串表达的数字是否可以被整除
  • 这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...
  • 栈与队列小结
  • SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置
  • ShardingSphere水平、垂直分库、分表和公共表
  • 《分布式技术原理与算法解析》学习笔记Day24
  • 强化学习RL 02: Value-based Reinforcement Learning
  • 08_MySQL聚合函数
  • 「TCG 规范解读」词汇表