NYOJ--187--快速查找素数(筛选法,素数打表)

快速查找素数

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述
现在给你一个正整数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 /*
 2     Name: NYOJ--187--快速查找素数
 3     Copyright: ?2017 日天大帝
 4     Author: 日天大帝
 5     Date: 29/04/17 15:04
 6     Description: 差点忘记这个求素数的方法
 7 */
 8 #include<cstring>
 9 #include<cstdio>
10 //#include<iostream>
11 const int MAX = 2 * 1e6;
12 char arr[MAX];
13 int main(){
14 //    ios::sync_with_stdio(false);//加了就超时
15     memset(arr,1,sizeof(arr));
16     arr[0] = arr[1] = 0;
17     for(int i=2; i<MAX; ++i){
18         if(arr[i])
19         for(int j=2*i; j<MAX; j+=i){
20             arr[j] = 0;
21         }
22     }
23     int n;
24     while(scanf("%d",&n),n){
25         for(int i=2;i<=n; ++i){
26             if(arr[i])printf("%d ",i);
27         }
28         printf("\n");
29     }
30     return 0;
31 }
时间: 2024-10-08 07:12:51

NYOJ--187--快速查找素数(筛选法,素数打表)的相关文章

NYOJ 187 快速查找素数

快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数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 打一下表就可以了 #include<stdio.h> #include<m

关于素数的快速查找——素数筛选法

利用素数筛选法进行素数的快速查找.原理很简单,素数一定是奇数,素数的倍数一定不是素数.思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行标记,奇数存为1,偶数存为0,最终实现结果为素数的prime值为1,因此将prime[2]赋值为1(2是素数).之后利用for循环,对N以内的奇数进行遍历(注意for循环的条件控制),for里用if判断是否为素数(奇数),若是,执行内部嵌套的for循环判断该奇数是否为素数,若是则标记为1,若不是则pri

hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5407 解题思路: 官方题解: The problem is just to calculate g(N) =\ LCM(C(N,0), C(N,1), ..., C(N, N))g(N) = LCM(C(N,0),C(N,1),...,C(N,N)). Introducing function f(n) =\ LCM(1, 2, ..., n)f(n) = LCM(1,2,...,n), the

ACM/ICPC 算法训练 之 &quot;打表&quot;思路(防超时) ——附加素数筛选法

何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据的时候,直接遍历容器,检索这个数据是否有题意要求的结果. 举一个几乎所有程序员都知道的简单例子= =: 求素数(POJ 1595)-Prime cuts 这一题大意是给出 多组N(1~1000)和C,让你从N内素数的中间项向外扩展C个素数,比如给出7 1,素数有5个(注意此题出题人坑爹得让1作为"素

HDU 2161 Primes (素数筛选法)

题意:输入一个数判断是不是素数,并规定2不是素数. 析:一看就很简单吧,用素数筛选法,注意的是结束条件是n<0,一开始被坑了... 不说了,直接上代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long LL; const int maxn = 16000 + 10; int p

HDU 1164 Eddy&#39;s research I【素数筛选法】

思路:将输入的这个数分成n个素数的相乘的结果,用一个数组存储起来.之后再输出就可以了 Eddy's research I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6633    Accepted Submission(s): 3971 Problem Description Eddy's interest is very ext

POJ 2689 Prime Distance 素数筛选法应用

题目来源:POJ 2689 Prime Distance 题意:给出一个区间L R 区间内的距离最远和最近的2个素数 并且是相邻的 R-L <= 1000000 但是L和R会很大 思路:一般素数筛选法是拿一个素数 然后它的2倍3倍4倍...都不是 然后这题可以直接从2的L/2倍开始它的L/2+1倍L/2+2倍...都不是素数 首先筛选出一些素数 然后在以这些素数为基础 在L-R上在筛一次因为 R-L <= 1000000 可以左移开一个1百万的数组 #include <cstdio>

POJ 3978 Primes(素数筛选法)

题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include<stdio.h> //素数筛选法 int pri[100000+10];//1 合数, 0 素数 void Prime() { memset(pri,0,sizeof(pri)); pri[1]=pri[0]=1; for(int i=2;i<50002;i++) { if(pri[i]==0)

POJ 2262 Goldbach&#39;s Conjecture(素数筛选法)

Description In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture: Every even number greater than 4 can be written as the sum of two odd prime numbers. For example: 8 =

ZZUOJ-1222- 属于ACMer的游戏 猜素数 (某月赛,总结一下素数筛选法)

题目位置:1222: 属于ACMer的游戏 猜素数 1222: 属于ACMer的游戏 猜素数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 88  Solved: 21 [Submit][Status][Web Board] Description ACM实验室的众大神们喜欢聚餐大家一起HAPPY 尤其卢学长喜欢请大家HAPPY,但是卢学长请吃饭有一个习惯,大家要一起玩一个热身游戏,猜素数. 游戏规则如下: 正常人的版本是这样:比如卢学长先约定一