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

Leetcode 204. 计数质数 java题解

https://leetcode.cn/problems/count-primes/description/

法一

请添加图片描述

class Solution {public int countPrimes(int n) {int count=0;for(int i=2;i<n;i++){//判断i是否质数boolean f=true;for(int j=1;j*j<=i;j++){//因子if(j!=1&&j!=i&&(i%j==0)){f=false;break;}}if(f){count++;}}return count;}
}
//质数:因子只有1和自己

会超时

法二:埃氏筛

数学方法
想象有一个数x,他是质数,但是他的倍数2x,…,kx(x是他的一个因子)一定不是质数。可以对这些倍数进行标记,标记为非质数,后续不再进行判断。
对于一个质数 x,如果按上文说的我们从 2x 开始标记其实是冗余的,应该直接从 x⋅x 开始标记,因为 2x,3*x,… 这些数一定在之前就被其他数的倍数标记过了,例如 2 的所有倍数,3 的所有倍数等。
比如(x-1)x,必然已经被(x-1)标记过所有的倍数,因为x-1排在x之前遍历到。
所以对于x的倍数遍历,应该从x
x开始。

class Solution {public int countPrimes(int n) {int[] nums=new int[n];//0是,1不是int count=0;for(int i=2;i<n;i++){if(nums[i]==0){//是质数count++;//这里必须类型转换if((long)i*i<n){//i平方还在范围内for(int j=i*i;j<n;j=j+i){nums[j]=1;//非 质数}}}}return count;}
}
http://www.lryc.cn/news/321552.html

相关文章:

  • 机器学习——终身学习
  • 一次完整的 HTTP 请求所经历的步骤
  • OpenGL学习笔记【1】——简介
  • C语言课后作业 20 题+考研上机应用题
  • macOS上基于httpd-dav搭建WebDav服务
  • Java-设计模式-单例模式
  • 图片html5提供的懒加载与vue-lazyload的区别
  • golang 根据某个特定字段对结构体的顺序进行排序
  • React Router 参数使用详解
  • Vue中$set用法解析
  • 进制,码制及其表示范围
  • 钡铼技术R40工业4G路由器加速推进农田水利设施智能化
  • 基于龙芯2k1000 mips架构ddr调试心得(一)
  • 智能合约语言(eDSL)—— 使用rust实现eDSL的原理
  • 敏捷开发——elementUI/Vue使用/服务器部署
  • uniapp 使用sqlite时无法读取到db文件中的数据
  • Linux 网络接口管理
  • 【设计模式】Java 设计模式之模板策略模式(Strategy)
  • SpringBoot项目前端Vue访问后端(图片静态资源) 配置
  • colab中数据集保存到drive与取出的方法
  • React 应该如何学习?
  • 跨平台无缝操作:ShareMouse让多电脑协同更高效
  • Vue使用pandoc-wasm进行各格式转换
  • springboot284基于HTML5的问卷调查系统的设计与实现
  • AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频
  • 详谈分布式事务
  • Java基础知识八股
  • 【Linux】网络基础一
  • Redis-2 Redis基础数据类型与基本使用
  • python提取身份证中的生日和性别