邝斌的ACM模板(素数)
来源:互联网 发布:hamilton回路算法 编辑:程序博客网 时间:2024/09/21 09:23
本博客整理自邝斌的ACM模板
2.1、素数
2.1.1 素数筛选(判断
/* * 素数筛选,判断小于MAXN的数是不是素数。 * notprime是一张表,为false表示是素数,true表示不是素数 */const int MAXN=1000010;bool notprime[MAXN];//值为false表示素数,值为true表示非素数void init(){ memset(notprime,false,sizeof(notprime)); notprime[0]=notprime[1]=true; for(int i=2; i<MAXN; i++) if(!notprime[i]) { if(i>MAXN/i)continue;//防止后面i*i溢出(或者i,j用long long) //直接从i*i开始就可以,小于i倍的已经筛选过了,注意是j+=i for(int j=i*i; j<MAXN; j+=i) notprime[j]=true; }}
2.1.2 素数筛选(筛选出小于等于 MAXN 的素数)
/* * 素数筛选,存在小于等于MAXN的素数 * prime[0] 存的是素数的个数 */const int MAXN=10000;int prime[MAXN+1];void getPrime(){ memset(prime,0,sizeof(prime)); for(int i=2; i<=MAXN; i++) { if(!prime[i])prime[++prime[0]]=i; for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++) { prime[prime[j]*i]=1; if(i%prime[j]==0) break; } }}
2.1.3 大区间素数筛选(POJ 2689)
/* * POJ 2689 Prime Distance * 给出一个区间[L,U],找出区间内容、相邻的距离最近的两个素数和 * 距离最远的两个素数。 * 1<=L<U<=2,147,483,647 区间长度不超过1,000,000 * 就是要筛选出[L,U]之间的素数 */#include <stdio.h>#include <algorithm>#include <iostream>#include <string.h>using namespace std;const int MAXN=100010;int prime[MAXN+1];void getPrime(){ memset(prime,0,sizeof(prime)); for(int i=2; i<=MAXN; i++) { if(!prime[i])prime[++prime[0]]=i; for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++) { prime[prime[j]*i]=1; if(i%prime[j]==0)break; } }}bool notprime[1000010];int prime2[1000010];void getPrime2(int L,int R){ memset(notprime,false,sizeof(notprime)); if(L<2)L=2; for(int i=1; i<=prime[0]&&(long long)prime[i]*prime[i]<=R; i++) { int s=L/prime[i]+(L%prime[i]>0); if(s==1)s=2; for(int j=s; (long long)j*prime[i]<=R; j++) if((long long)j*prime[i]>=L) notprime[j*prime[i]-L]=true; } prime2[0]=0; for(int i=0; i<=R-L; i++) if(!notprime[i]) prime2[++prime2[0]]=i+L;}int main(){ getPrime(); int L,U; while(scanf("%d%d",&L,&U)==2) { getPrime2(L,U); if(prime2[0]<2)printf("There are no adjacent primes.\n"); else { int x1=0,x2=100000000,y1=0,y2=0; for(int i=1; i<prime2[0]; i++) { if(prime2[i+1]-prime2[i]<x2-x1) { x1=prime2[i]; x2=prime2[i+1]; } if(prime2[i+1]-prime2[i]>y2-y1) { y1=prime2[i]; y2=prime2[i+1]; } } printf("%d,%d are closest, %d,%d are most distant.\n",x1,x2,y1,y2); } }}
阅读全文
1 0
- 邝斌的ACM模板(素数)
- 邝斌的ACM模板(素数筛选和合数分解)
- 邝斌的ACM模板(随机素数测试和大数分解(POJ 1811) )
- 邝斌的ACM模板(求逆元)
- 邝斌的ACM模板(FFT)
- 邝斌的ACM模板(RMQ )
- 邝斌的ACM模板(树链剖分)
- ACM模板 素数打表
- 邝斌的ACM模板(高斯消元法求方程组的解)
- 邝斌的ACM模板(高斯消元(浮点数))
- 邝斌的ACM模板(目录篇)
- 邝斌的ACM模板(KMP算法)
- 邝斌的ACM模板(扩展 KMP)
- 邝斌的ACM模板(AC 自动机)
- 邝斌的ACM模板(后缀数组)
- 邝斌的ACM模板(后缀自动机)
- 邝斌的ACM模板(字符串 HASH)
- 邝斌的ACM模板(模线性方程组)
- maven的java web项目启动找不到Spring ContextLoaderListener的解决办法
- GIT学习之路第三天 文件操作
- IDEA WebStorm注册码2017.2(可用)
- 系统编程函数之信号量
- Java递归实现目录复制
- 邝斌的ACM模板(素数)
- i.MX6 GPIO配置
- ajax方法封装优化
- Docker Client创建与命令执行
- SpringMVC解决中文乱码问题
- 倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier
- linux上安装启动elasticsearch-5.5.1完整步骤
- UVA1262Password
- android安全list