1246.素数筛选
2012-06-04 16:41
288 查看
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1246
Time Limit: 2000 MS Memory Limit: 65536 K
Total Submissions: 749 (119 users) Accepted: 89 (58 users)
Description
请求出区间[A,B]之间的素数的个数。
Input
输入有多组数据。
第一行为正整数T(T<10),表示输入的数据组数。
第二行到第T+1行,每行2个数字A,B(0<A<=B<2^31,且B-A<2^20)表示区间的范围。
Output
输出T行数字,每行只有一个数字,表示对应的素数的个数。
Sample Input
2
100 200
2 1000000
Sample Output
21
78498
Time Limit: 2000 MS Memory Limit: 65536 K
Total Submissions: 749 (119 users) Accepted: 89 (58 users)
Description
请求出区间[A,B]之间的素数的个数。
Input
输入有多组数据。
第一行为正整数T(T<10),表示输入的数据组数。
第二行到第T+1行,每行2个数字A,B(0<A<=B<2^31,且B-A<2^20)表示区间的范围。
Output
输出T行数字,每行只有一个数字,表示对应的素数的个数。
Sample Input
2
100 200
2 1000000
Sample Output
21
78498
#include <iostream> #include <cstring> using namespace std; const int N = 46341; bool isprime[1048576+10]; unsigned int prime[5000]; int Prime() { int i,j,k=0; memset(isprime,1,sizeof(isprime)); for(i=2;i<=N;i++) { if(isprime[i]) { prime[k++]=i; for(j=2*i;j<=N;j+=i) isprime[j]=0; } } return k; } int main () { unsigned int j,t,n,m,ans,i,k,p; p=Prime(); cin>>t; while (t--) { cin>>n>>m; if(n<2) n=2; ans=m-n+1; memset(isprime,1,sizeof(isprime)); for(i=0;i<p&&prime[i]*2<=m;i++) { k=n/prime[i]; if(n%prime[i]) k++; if(k==1) k++; for(j=k*prime[i];j<=m;j+=prime[i]) { if(isprime[j-n]) { ans--; isprime[j-n]=0; } } } cout<<ans<<endl; } }
相关文章推荐
- xmu 1246.素数筛选
- poj2635-大进制转化+同余定理+素数筛选
- zoj 1951 Goldbach's Conjecture(素数筛选继续水)
- 利用filter()去除数组中的重复元素,利用filter()筛选出数组中的素数
- 菜鸟系列——素数筛选-Miller-Rabin素数测试等
- poj1595 Prime Cuts (素数筛选)
- Eratosthenes素数筛选
- uva 10140 素数筛选(两次)
- POJ 2262 Goldbach's Conjecture ( 筛选法求素数 )
- LightOJ 1197 Help Hanzo (区间素数筛选法)
- 大区间素数筛选(POJ 2689)
- 线性筛选素数法
- ACM常用素数判断筛选法及其优化
- 素数筛选法----孪生素数问题
- 快速幂取模&&素数筛选&&最大公约数
- HDU NO.2546 素数回文(筛选法求素数表)
- HDU6069(素数筛选+思维)
- CF:358C 暴力DP筛选素数预处理
- PHP判断素数,循环,筛选——默认可执行时间秒数,默认可执行空间。用来测试运行效率
- 素数筛选