prime
2016-03-06 21:34
267 查看
#include<iostream> #include<string.h> using namespace std; const int MAX=10000000; bool visit[MAX]; int prime[670000]; int num=0; void getprime() { memset(visit,true,sizeof(visit)); visit[1]=false; long long int i,j; for(i=2;i<=MAX;i++) if(visit[i]) { num++; prime[num]=i; for(j=i*i;j<=MAX;j+=i) visit[j]=false; } } int main() { getprime(); cout<<num; }
线性筛,还有注意区间。poj2689
#include<stdio.h> #include<string.h> const int n=50000; int prime ,num=0; bool p[1000100]; bool visit ; void getprime() { memset(visit,true,sizeof(visit)); int i,j; for(i=2;i<=n;i++) { if(visit[i]) prime[num++]=i; for(j=0;j<num;j++) { if(i*prime[j]>n) break; visit[i*prime[j]]=false; if(i%prime[j]==0) break; } } } int main() { getprime(); int r,l,i,j,s,t,d; while(scanf("%d%d",&l,&r)!=EOF) { memset(p,true,sizeof(p)); if(l==1) l++; for(i=0;i<num;i++) { s=(l-1)/prime[i]+1; t=r/prime[i]; for(j=s;j<=t;j++) if(j>1) p[j*prime[i]-l]=false; } int mina=0,minb=0x7fffffff,maxa=0,maxb=0; for(i=0;i<=r-l;i++) if(p[i]) { d=i; break; } for(i=d+1;i<=r-l;i++) if(p[i]) { if(i-d>maxb-maxa) { maxb=i; maxa=d; } if(i-d<minb-mina) { minb=i; mina=d; } d=i; } mina+=l; minb+=l; maxa+=l; maxb+=l; if(maxb!=l) printf("%d,%d are closest, %d,%d are most distant.\n",mina,minb,maxa,maxb); else printf("There are no adjacent primes.\n"); } }
相关文章推荐
- js 实现各种排序
- 20145129 《Java程序设计》第1周学习总结
- -*- coding:utf-8 -*-
- Oracle学习之shared pool的组成
- 在Ubuntu 16.04 LTS上安装redmine 3.2.0
- IOS项目去除NSLog
- 动态规划(DP),0-1背包问题
- 关于PHP框架
- VMware虚拟机网络设置――三种方式详解
- JS 数组随机排序
- 第1章 jQuery简介
- Android拖动和缩放
- XSD文件生成C#VO实体类
- ST-2
- 五个问题
- IOS-如何锁定Xcode的API头文件
- 四大开源协议比较
- python内存管理
- CCS5.5入门-hello world
- 未使用的局部变量