POJ2689 Prime distance 素数
来源:互联网 发布:淘宝买东西往哪里存钱 编辑:程序博客网 时间:2024/05/29 12:45
/* 题目描述:给出长度小于1e6的区间[L , R] (1 <= L < R <=2^31),要求输出区间内距离最远的两个素数和距离最近的 的两个素数,如果区间内不足两个素数按照题目要求输出 方法:由定理可知,“n为合数则n一定有不超过√n的素因子”,因此,可以预处理1e5以内的所有素数,在利用这些素数 对L , R之间的数进行筛选,用vis数组记录L~R之间的每一个数是否为素数,其中用vis[i]表示i+L是否为素数的 情况。*/#pragma warning(disable:4786)#pragma comment(linker, "/STACK:102400000,102400000")#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<stack>#include<queue>#include<map>#include<set>#include<vector>#include<cmath>#include<string>#include<sstream>#define LL long long#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)#define mem(a,x) memset(a,x,sizeof(a))#define lson l,m,x<<1#define rson m+1,r,x<<1|1using namespace std;const int INF = 0x3f3f3f3f;const int mod = 1e9 + 7;const double PI = acos(-1.0);const double eps=1e-8;const int maxn = 1e5 + 5;int isprime[maxn], vis[10 * maxn];LL prime[maxn];int pnum ;void find_prime(int n){ pnum = 0; mem(prime, 0); mem(isprime, 1); for(int i = 2 ; i < n ; i++){ if(isprime[i]) prime[pnum++] = i; for(int j = 0; j<pnum && i * prime[j] < n ; j++){ isprime[i * prime[j] ] = 0; if(i % prime[j] == 0) break; } }}int main(){ find_prime(1e5 + 2); LL L , R; while(scanf("%lld %lld",&L,&R)!=EOF){ mem(vis,1); for(LL i = 0 ; i<pnum ; i++){ if(prime[i] > R) break; LL j = L / prime[i]; while(j * prime[i] < L) ++j; if(j == 1) j = 2; for( ; j * prime[i] <= R ; j++){ vis[ j * prime[i] - L ] = 0; } } if( L == 1) vis[0] = 0; LL maxv = - INF , minv = INF , last = -1 ; LL maxx , maxy , minx , miny ; bool ok = 0; for(int i = 0 ; i<= R - L ; i++){ if(last == -1 && vis[i]) last = i; else if(last != -1 && vis[i]){ if(maxv < i - last + 1){ maxv = i - last + 1; maxx = last ; maxy = i; } if(minv > i - last + 1){ minv = i - last + 1; minx = last ; miny = i; } ok = 1; last = i; } } if(ok) printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minx + L , miny + L , maxx + L , maxy + L); else printf("There are no adjacent primes.\n"); } return 0;}
0 0
- POJ2689 Prime distance 素数
- POJ2689 Prime Distance 素数距离
- poj2689 Prime Distance 素数筛选应用 复习
- POJ2689:Prime Distance(大区间素数)
- POJ2689 Prime Distance
- poj2689 Prime Distance
- POJ2689 Prime Distance
- poj2689 Prime Distance
- 【数论】poj2689 Prime Distance
- POJ2689 Prime Distance
- poj2689 Prime Distance
- POJ2689 Prime Distance
- poj2689 Prime Distance
- Prime Distance(poj2689变形的筛法素数)
- 素数筛选(2次):poj2689 Prime Distance
- POJ2689——Prime Distance(大区间素数筛)
- poj2689(Prime Distance两次筛)
- Prime Distance----筛素数
- 数学+贪心_____It's All In The Mind( hdu 5742 2016多校第二场)
- C#项目中如何读取并修改App.config文件
- 对比JAVA学习PHP系列:面对对象
- [Unity热更新]tolua# & LuaFramework(十四):更新下载(中)
- mongodb复制和分片
- POJ2689 Prime distance 素数
- C#访问Access完整增删改查代码
- java开发乱码解决
- HTML5(李炎恢)学习笔记四 ------------- HTML5元素(中)
- 前端的小玩意(8)——旋转的盒子(纯CSS动画效果)+可自由拖动(js)
- marquee标签的向上无缝滚动
- Linux系统编程之信号的可重入性
- 【bzoj2002】【Hnoi2010】【Bounce】【弹飞绵羊】【分块】
- @ManyToMany 映射