素数筛子算法

描述

现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。

输入

给出一个正整数数N(N<=2000000)
但N为0时结束程序。
测试数据不超过100组

输出

将2~N范围内所有的素数输出。两个数之间用空格隔开

样例输入

5
10
11
0

样例输出

2 3 5
2 3 5 7
2 3 5 7 11

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #define N 2000001
 5
 6 int main(){
 7     int i;
 8     int j;
 9     char flag[N];
10     memset(flag,‘0‘,N);
11     flag[0]=‘1‘;
12     flag[1]=‘1‘;
13
14     for(i=2;i<=sqrt(N);i++){
15         if(flag[i]==‘0‘){
16             for(j=i*i;j<N;j+=i){
17                 flag[j]=‘1‘;
18             }
19         }
20     }
21
22     int number;
23
24     while(1){
25         scanf("%d",&number);
26
27         if(number==0)
28             break;
29
30         for(i=2;i<=number;i++){
31             if(flag[i]==‘0‘)
32                 printf("%d ",i);
33         }
34
35         printf("\n");
36     }
37
38     return 0;
39 }
时间: 2024-11-02 12:31:51

素数筛子算法的相关文章

[email&#160;protected] Sieve of Eratosthenes (素数筛选算法) &amp; Related Problem (Return two prime numbers )

Sieve of Eratosthenes (素数筛选算法) Given a number n, print all primes smaller than or equal to n. It is also given that n is a small number. For example, if n is 10, the output should be “2, 3, 5, 7″. If n is 20, the output should be “2, 3, 5, 7, 11, 13,

Miller-Rabin素数测试算法

由费马小定理可以知道,若p是素数且a是整数,则满足a^p==a(mod p).若存在正整数a不满足a^p==a(mod p),那么n是合数. 定义:令a是一个正整数,若p是合数且满足a^p==a(mod p),则p称为以a为基的伪素数. Miller-Rabin素数测试算法原理: 假如p是素数,且(a,p)==1,(a为任意小于p的正整数),那么a^p-1==1(mod p).如果a^p-1==1(mod p), 则可认为n是素数,取多个底进行试验,次数越多,n为素数概率越大.(我的个人理解多次

素数推断算法(高效率)

chuanbindeng 的 素数推断算法 关于素数的算法是信息学竞赛和程序设计竞赛中常考的数论知识,在这里我跟大家讲一下寻找一定范围内素数的几个算法.看了以后相信 对大家一定有帮助. 正如大家都知道的那样,一个数 n 假设是合数,那么它的全部的因子不超过sqrt(n)--n的开方,那么我们能够用这个性质用最直观的方法 来求出小于等于n的全部的素数. num = 0; for(i=2; i<=n; i++) {  for(j=2; j<=sqrt(i); j++) if( j%i==0 ) b

大素数筛子

题目地址:http://acm.fafu.edu.cn/problem.php?id=1011 Description: The problem is very simple,your job is just to calculate the sum of primes from the first prime to the Nth prime. Input: The input consists multiple cases. Each line contains a N(1<=N<=100

Miller_Rabin素数测试算法模板对比

昨天在USACO做了一道判断素数的题,就想着学习一下Miller_Rabin素数测试算法,在网上找到两种模版,第一种十分简洁,运行速度也很快,但是会判错极少的几个非素数:第二种比较麻烦,运行速度很慢,所以我便想找到第一种模版不能判断的非素数特判一下,结果用了一天,电脑只找到10^8以下的,10^9内还有2个没找到,但正确的模版运行速度太慢,我的电脑又太渣,耗不起时间了,姑且先这样,等以后有深入理解有更好的方法再更新一下. 第一种:源自吉林大学ACM模版 刚开始用的是随机数测试,我想到以前了解过只

素数判断算法(python实现)

素数是只能被1与自身整除的数,根据定义,我们可以实现第一种算法. 算法一: def isprime(n): if n < 2: return False for i in range(2,int(math.sqrt(n))+1): if n % i == 0: return False return True 任意一个合数都可分解为素数因子的乘积,观察素数的分布可以发现:除 2,3 以外的素数必定分布在 6k (k为大于1的整数) 的两侧.6k % 6 == 0, (6k+2) % 2== 0,

素数判断算法(基于python实现)

素数是只能被1与自身整除的数,根据定义,我们可以实现第一种算法. 算法一: def isprime(n): if n < 2: return False for i in range(2,int(math.sqrt(n))+1): if n % i == 0: return False return True 任意一个合数都可分解为素数因子的乘积,观察素数的分布可以发现:除 2,3 以外的素数必定分布在 6k (k为大于1的整数) 的两侧.6k % 6 == 0, (6k+2) % 2== 0,

浅谈Miller-Rabin素数检测算法

浅谈Miller-Rabin素数检测 对于素数判断的操作,我们通常使用的是时间复杂度为\(O(\sqrt N)\)的试除法.按理说这种复杂度已经是较优秀的了,但是假如给定的需要判断的数极其之大,并且给定的时限不够以\(O(\sqrt N)\)的试除法来判断,该怎么办? 题出错了 想得美. 于是,今天的主角出场了:Miller-Rabin素数检测. Miller-Rabin素数检测算法用于在短时间内判断出一个数是否是质数,时间复杂度比试除法优秀,应该是\(O(T\times \log N)\)级别

素数判别算法

素数筛选法 原理就是当i是素数的时候,i的所有的倍数必然是合数.如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉.算法实现 1 #include <iostream> 2 #include <math.h> 3 using namespace std; 4 5 int main() 6 { 7 int N = 1000000; 8 //prime用来保存下标i是否是素数 9 bool prime[N+1]; 10 //初始化,偶数(除了2)都是合数 11 f