筛法求素数

  这属于我用于解[url=http://projecteuler.net]Project Euler[/url]问题而写的数学工具的一部分。之前见[url=http://eastsun.iteye.com/admin/blogs/207614]按字典顺序生成所有的排列[/url]
/**
&#Util.scala
utils for mathematical algorithm,include:
# get all primes below bound in order
# generate all permutations in lexicographical order
@author Eastsun
*/
package eastsun.math

object Util {
/**
Get all primes below bound in order
*/
def getPrimes(bound:Int):Array[Int] = {
import scala.math._
if(bound <= 2) return Array()
var sq = sqrt(bound-1)
var half = (bound-1)/2
var flags = new Array[Boolean](half+1)
var prime = 3
while(prime <= sq){
var idx = prime*prime/2
while(idx <= half){
flags(idx) = true
idx += prime
}
do{
prime += 2
}while(flags(prime>>>1))
}
var count = 1
var idx = 1
while(idx <= half){
if(!flags(idx)) count += 1
idx += 1
}
if((bound-1)%2 == 0 && !flags(half)) count -= 1
var primes = new Array[Int](count)
primes(0) = 2
idx =1
var idp = 1
while(idp < count){
if(!flags(idx)){
primes(idp) = 2*idx + 1
idp += 1
}
idx += 1
}
primes
}
}
筛法求N以内的素数 C++ 筛法求n以内的素数 筛法求素数:把2到n中所有的数都列出来,然后从2开始,先划掉n内所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其n内的所有倍数。最后剩下的数,就都是素数。 是以空间换时间的算法,时间复杂度为O(n)。 设置一个标志数组 isPrime, isPrime[i]的值是1就表示i是素数。开始数组元素值全部为1。 划掉k的倍数,就是把isPrime数组,... 阅读详情

相关推荐

C++求前N个素数——线性筛法

C++求前N个素数——线性筛法 素数 又称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 判断素数 一般而言,判断一个数n是不是素数,只需要用n分别除以[2,n-1]看是不是能整除,这样的话时间复杂度为O(n^2)。 但是实际上我们其实只需要用n分别除以[2,floor(sqrt(n-1))]就可以判断出n是否是素数了,但是为什么呢,我也不知道,反正大家都这么干 这样下来的时间开销是√1+√2+√3+…+√n,这个式子目前好像还没有公式可以表示。 //判断一个数是否是素数 bo

qq_34025034的博客 3609

Java求质数的几种方法(埃氏筛选法)

Java求质数,埃氏筛选法

weixin_64366370的博客 3785

关于素数的算法(筛法求小于n的素数)

遇到了一个要求用筛法求小于n的素数的算法题目 以前在上课时也写过不少次求素数的算法,今天汇总一下,然后试一下筛法。 先写一个函数,功能是判断x是否是素数 int panduan(int x) //判断x是否为素数 { if(x==1)return 0; //1不是素数 int i; int y=sqrt(x); //x的“因数对”除了两个根号x相等外,其他...

qq_43298035的博客 2701

Java—筛选法求素数

主要思路: 从2开始,每一个数的倍数都不是素数。去掉所有数的倍数,剩下的就是素数。 主要技巧: 把数组下标当作每一个素数, 而数组内的值当作1/0(true/false)。 代码实现: import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner (System.in); boolean [] a = new bool

weixin_62633072的博客 1516

java代码中求100-200之间的质数,详细代码

java代码中求100-200之间的质数,详细代码。java,程序员,编程技术,android,面试题

java使用筛选法求n以内的素数示例(java求素数)

主要介绍了java使用筛选法求n以内的素数示例(java求素数),需要的朋友可以参考下

Java筛选法求素数

题目描述 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7)) 输入描述:输入包括一个整数n,(3 ≤ n < 1000)输出描述:输出对数示例1 输入 10 输出 2import java.util.Scanner; public class Ma

qq_26761587的博客 2949

Java实现欧拉筛与花里胡哨求质数高级大法的对比

我也不清楚这是什么高级算法,欧拉筛是昨天有位大佬,半夜无意间告诉我的 欧拉筛: 主要的含义就是我把这个数的所有倍数都弄出来,然后下次循环的时候直接就可以跳过了 import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; public class 求指数 { public static ArrayList list = new ArrayList(); public static void main(String[] args) {

【Java 算法】埃氏筛法

Java 埃氏筛法,判断1~n之间的所有素数与合数!

学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗 1465

STM32以太网通信-STM32以太网外设(ETH)

通过 DMA 控制器进行介质访问控制 (MAC) STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。 借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。 ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于

暖暖_的_纠结的博客 2万+

V93000 SmarTest 8入门:从零搭建你的第一个半导体测试程序

半导体测试是芯片从设计走向量产的关键环节,而ATE(自动化测试设备)正是支撑这一环节的核心工具。理解ATE测试程序开发的基本原理,不仅需要掌握测试机台的硬件架构,还要熟悉其软件环境中的管脚映射、电平时序、测试流程等底层逻辑。V93000作为爱德万的主力平台,其SmarTest 8环境通过对象化与流程化设计,将复杂的芯片测试任务拆解为可配置、可复用的模块,极大提升了并行测试效率与调试的便利性。无论是数字逻辑芯片的功能验证,还是模拟混合信号器件的参数测量,掌握SmarTest 8的核心操作都能帮助你快速搭建出可

weixin_31476015的博客 246

线性筛法求素数

线性筛法求素数,顾名思义,其时间复杂度为O(n)。我是第一次接触线性筛法求素数,其中有些难理解的地方的确花了很多时间。先放出代码:#include using namespace std; const long MAXP = 200000; long prime[MAXP] = {0},num_prime = 0; int isNotPrime[MAXP] = {1, 1}; int main() { for(long i = 2 ; i

小坏孩的专栏 1万+

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 298

快速线性筛法求素数

说到求素数,其实在刚开始学C++的时候就已经见过诸如此类的问题,不过现在最常见的还是筛法求素数 谈及筛法求素数,其大致思路可分为如下五步: (1).把2到n的自然数放入a[2]到a[n]中(所放入的数与下标号相同) ; (2).在数组元素中以下标为序,按顺序找到未曾找过的最小素数minp和它的位置p(即下标号); (3).从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉...

zgwzgw的博客 2598

ABAP CDS View 从入门到精通教程目录:ABAP CDS View 在 SAP 技术体系中的重要地位

学习 ABAP CDS View 的开发技术,体会其背后的设计理念,也就掌握了 SAP S/4HANA 底层数据模型的设计精髓。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4785

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

C语言丨筛法求素数(质数)

素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。素数被广泛用于密码学、汽车变速箱齿轮设计、害虫的生物生长周期与杀虫剂使用之间的关系、导弹和鱼雷等领域上,具有重要意义。本文就来介绍求素数的一种方法:筛法。

weixin_60921752的博客 1万+

YOLOv11低照度目标检测优化方案:基于SCINet可训练预处理主干的全流程实现指南

创建一个新的Python文件,如。

FJN110的博客 189

快速求素数表——埃氏筛法与欧拉筛法

快速求素数表——埃氏筛法与欧拉筛法快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛法时间复杂度 埃欧拉筛法代码求出1000000以内的素数并且输出n个素数埃氏筛法埃氏筛法原理素数的定义:素数就是除了1和本身之外没有其他的约数,所以有约数的都不是素数。 因此,埃氏筛法的思想就是:先去掉

企鹅崽博客 3640

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2253

探索如何利用CST和ADS进行DDR的SIPI联合仿真

本文系统介绍了CST和ADS两款工具进行DDR信号完整性/电源完整性(SI/PI)联合仿真的方法。CST采用工作室协同方式,通过PCB布局导入、材料设置、模型分配等步骤,重点分析了电源阻抗优化和信号波形质量。ADS则利用SIPro、PIPro等专用工具,突出系统级验证和自动化优化功能。两者各有优势:CST擅长3D结构精确建模,ADS更适于快速系统验证。文章建议可根据项目需求混合使用两种工具,并提供了模型简化、频带选择等实用技巧。通过对比分析,为工程师选择仿真工具提供了决策参考。

一只豌豆象的博客 1150

欧拉筛法求素数原理详细解释

欧拉筛法求素数 首先要说明一些数学知识 一个数可以分成两个数的乘积,即c=ab。其中当a为c的最小质因子时,对于任意的c,显然若a相同,则b必定各不相同;若a不相同则b可能相同或不相同。所以c=ab中,任意两个的c分解出来的a和b至少有一个不相同,即a不相同或者b不相同。 总结:只要a是c的最小质因子数,每次以a*b的形式去筛除c,且在a相同时b不相同,则就可以保证c只被筛除一次。 通过每一次循环将以su[j]作为最小质因数,筛除i*su[j]。当i%su[j]==0时,则i=su[j]某个数x,假设x可以

m0_46200304的博客 4602

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 想再想一遍,你温柔的脸
下一篇: Project Euler解题汇总 051 ~ 060
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值