利用筛法求质数

 1 package algorithm;
 2 //转载请注明
 3 public class FilterPrime {
 4     public static void filterPrime(int n) {
 5         boolean[] isPrimes = new boolean[n+1];
 6         for(int i=2;i<=n;i++){
 7             isPrimes[i]=true;
 8         }
 9         isPrimes[2]=true;
10         for(int j=2;j<=n;j++){
11             if(isPrimes[j]==true){
12                 for(int m=2;j*m<=n;m++){
13                     isPrimes[j*m]=false;
14                 }
15             }
16         }
17         for(int k=2;k<=n;k++){
18             if(isPrimes[k]==true){
19                 System.out.println(k+"是素数");
20             }
21         }
22     }
23
24     public static void main(String[] args) {
25         filterPrime(23);
26     }
27 }
时间: 2024-09-29 23:38:02

利用筛法求质数的相关文章

利用筛法求素数表

const int Max = 1e6 + 50; int isPrime[Max];<span style="white-space:pre"> </span>//素数判断结果表 int tblPrime[Max];<span style="white-space:pre"> </span>//所求得的素数表 int lenPrimes;<span style="white-space:pre&quo

电影里的代码之《机械姬》:筛法求质数

今天看了<机械姬>,探讨人工智能话题的电影,豆瓣评分7.5,还是蛮不错的一部电影.影片1:09:29处出现了一段python代码,细看了一下,发现是筛法求质数的python代码,写得非常简练的.先贴个电影的截图: 影片里的代码略微有点模糊,我重新打一遍,是下面这个样子的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #coding:utf8 import sys def sieve(n):    

【基础练习】埃拉托色尼筛法求质数

跑了一个质数表,哈希可能能用到 一开始跑的是0x3f3f3f3f以内,这个数等于1061109567 十亿多一点 结果什么软件也打不开那么大的文件 里奥说估计有一亿多个质数 于是换成一千万以内 跑出来了 代码放上 上次忘了古诗文···还是两句 --夜来风雨声,花落知多少 --有约不来过夜半,闲敲棋子落灯花 版权声明:转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看

求质数的几种算法

1.根据质数的定义求 质数定义:只能被1或者自身整除的自然数(不包括1),称为质数. 利用它的定义可以循环判断该数除以比它小的每个自然数(大于1),如果有能被它整除的,则它就不是质数. 对应代码是: void printPrime(int n){//判断n是否是质数         boolean isPrime=true;//是否是质数的标志         for(int i=n-1;i>1;i—){//n除以每个比n小比1大的自然数 if(n%i==0){//如果有能被整除的,则不是质数

数论_筛法求素数

线筛,时间复杂度O(N log log N) 原理比较易懂,因为合数可以被分解为两个因数. 所以可以反过来,两个因数的乘积必定不是质数. 所以,通过一次次的枚举两个因数,合数就被"筛选"掉了,只留下质数在筛子里. 按照上述的原理,核心代码本应该是这样的: bool vis[MAXN] = {true, true, false}; for(i = 2; i <= N; i++) { for(j = 2; i*j <= N; j++) { vis[i*j] = true; //

C#筛法求出范围内的所有质数

    科普篇:筛法是一种简单检定素数的算法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratosthenes). 说实话,之前我在求质数的场合都是验证某一数是否为质数的,用定义求即可方便的得出结论,代码如下: 01: public static bool IsPrime(int n) 02: {//判断n是否是质数 03: if (n < 2) return false; 04: for (int i =

利用数组求前n个质数

我的算法思想和实现方式都在代码和注释当中呢,这样的方式确实使算法复杂度降低一个等级,很好啊. #include <stdio.h> #include <time.h> /** * 利用数组求前n个质数 * 确定一个数m是否为质数,可以用已求出的质数对m * 的整除性来确定 */ //如果不知道质数的特性和想不到优化思路的方法 void getNPrimes_normal(); //优化之后的方法 void getNPrimes_optimize(); int main(void)

poj 2689 Prime Distance 【数论】【筛法求素数】

题目链接:传送门 题目大意: 给你L和R两组数,L和R的范围是2^32,其间隔(即R-L最大为1,000,000.) .让你求出L和R之间素数的最大间隔和最小的间隔. 比如 2 17.之间的最小素数间隔是2 3,最大的素数间隔是11 17. 要是直接进行一个2^32次方筛法然后在判断是会T的. 我们这样来想,筛法求素数的原理是什么: /**vis数组标记为0则说明是素数*/ int vis[10005]; void getPrimevis(int n) { int m=sqrt(n+0.5);

初等数论-Base-1(筛法求素数,欧拉函数,欧几里得算法)

前言 初等数论在OI中应用的基础部分,同机房的AuSquare和zhou2003君早就写完了,一直划水偷懒的Hk-pls表示很方,这才开始了这篇博客. $P.S.$可能会分部分发表. 筛法求素数 埃式筛素数 问题:求$[1,n]$中的所有素数 总体思路就是在$[2,n]$中每当我们找到一个新的素数,在把它加入我们的素数队列的同时我们把它的倍数全部打上标记(包括它自己),下一个没有被标记的数就是新的素数. void find_prime(int n){ memset(used,0,sizeof(u