joj 1928
2012-02-14 17:05
218 查看
筛选法求素数~~~~~
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> using namespace std; int prim[50000]; int main() { memset(prim,0,sizeof(prim)); int i; for(i=2;i<50000;i++) { if(prim[i]==0) { int j; for(j=i+i;j<50000;j+=i) { prim[j]=1; } } } int x1,x2; while(scanf("%d%d",&x1,&x2)!=EOF) { if(x1<2) { x1=2; } int number[x2-x1+10]; memset(number,0,sizeof(number)); int i; for(i=2;i<sqrt(x2)+1;i++) { if(prim[i]==0) { int j; if((x1/i)*i==x1) { j=0; } else { j=(x1/i)*i+i-x1; } if(j+x1==i) { j+=i; } for(;j<=x2-x1;j+=i) { number[j]=1; } } } int j; j=0; int r,l; int now,max=0,min=10000000; while(number[j]!=0) { j++; } int b1=-1,b2=-1,c1=-1,c2=-1; now=j; j++; for(;j<=x2-x1;j++) { if(number[j]==0) { if(j-now>max) { max=j-now; b1=now+x1; b2=j+x1; } if(j-now<min) { min=j-now; c1=now+x1; c2=j+x1; } now=j; } } if(b1==-1) { printf("There are no adjacent primes.\n"); } else { printf("%d,%d are closest, %d,%d are most distant.\n",c1,c2,b1,b2); } } }
相关文章推荐
- joj 1928
- 区间素数筛选法 joj 1928 Prime Distance
- JOJ ACM 1061
- 关于JOJ 2042的启发——一种写程序计算幂函数的方法
- JOJ 1060: Time And Motion 解题报告
- JOJ 2360: Trading Transaction
- JOJ1169: Super Market
- joj1386
- joj 2652 数组操作
- joj 1026解题报告
- joj 2569: Musical Chairs (约瑟夫环 数学方法非迭代)
- joj 1131: Intersection (判断直线与矩形是否有交点)
- Discrete Logging hunnu10590 pku2417 fzu 1352 hit 1928 zoj 1898
- JOJ 1984: A Round Peg in a Ground Hole (判断点在凸多边形内)
- joj 1169
- joj 2645
- joj2474
- joj 2343
- joj 2651
- poj 1928 The Peanuts