lightOJ 1197 Help Hanzo 两阶段素数筛选
来源:互联网 发布:淘宝挤爆了 编辑:程序博客网 时间:2024/05/16 08:08
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197
题意:给你两个整数a,b,让你求在a,b之间的素数的个数,b-a<=100000
思路:先打出在小范围的素数表,在利用小范围的素数,对大的数进行筛选
代码:
#include<stdio.h>#include<string.h>const int MAXN=70000;bool flag[MAXN+10],f[100010];long long p[MAXN+10];long long z;void getPrime(){ long long i,j; z=0; memset(flag,true,sizeof(flag)); for (i = 2; i <=MAXN; i++)//求出70000之间的素数 { if (flag[i]) { p[z++]=i; //z++; for (j = i * i; j <=MAXN; j += i) { flag[j]=0; } } }}int main(){int T,kase=0;int cont; long long m,n,i,sz,k; getPrime();scanf("%d",&T); while(T--) {scanf("%lld%lld",&m,&n); cont=0; if(n<70000) { for(i=m;i<=n;i++) { if(flag[i] && i!=1) cont++; }} else {if(m<=2) m=2;//注意对m等于1做处理 sz=n-m; for(i=0;i<=sz;i++) f[i]=true; for(i=0;i<z && p[i]*p[i]<=n;i++) { k=m/p[i];//当m%p[i]==0 && m/p[i]==1,时m为素数,k=1 if(k*p[i]<m) k++;//当m%p[i]!=0时,跳到下一个 if(k<=1) ++k;//跳到下一个 while(k*p[i]<=n) { f[k*p[i]-m]=false; ++k; } } for(i=0;i<=sz;i++) { if(f[i]) cont++; }}printf("Case %d: %d\n",++kase,cont); } return 0;}
0 0
- lightOJ 1197 Help Hanzo 两阶段素数筛选
- LightOJ 1197Help Hanzo (区间素数筛选法)
- LightOJ 1197 Help Hanzo(区间素数筛选)
- LightOJ - 1197 Help Hanzo 素数筛
- LightOJ 1197 Help Hanzo
- LightOJ 1197 Help Hanzo
- lightOJ 1197 Help Hanzo (区间找素数)
- LightOJ 1197 Help Hanzo(区间素数筛)
- LightOJ 1197 Help Hanzo 求区间内素数的个数
- Help Hanzo(区间求素数) LightOJ
- 【区间筛法】 LightOJ 1197 Help Hanzo
- E - Help Hanzo(LightOJ 1197)
- Help Hanzo LightOJ
- Light OJ 1197 1197 - Help Hanzo(大区间素数筛选)
- LOJ - 1197 - 《Help Hanzo》【区间素数】
- Help Hanzo light OJ 1197 “素数筛”
- Help Hanzo(素数筛)
- LightOJ 1197 - Help Hanzo (模拟筛素法区间筛素)
- android TouchEvent事件传递
- Android中单位值得使用
- 對Report式ListView進行排序
- 利用jcifs进行NTLM协议认证,生成ws访问客户端
- Android离线帮助文档打开慢的解决办法
- lightOJ 1197 Help Hanzo 两阶段素数筛选
- 黑马程序员----集合框架
- LeetCode 3 Longest Substring Without Repeating Characters
- 用记事本编写app接口,sqllite数据库操作
- MFC中在基于对话框的窗体中使用CFileDialog导致菜单栏变灰的解决方案
- spring security与cas 集成(中)续
- 读写ini
- android browser独立应用编译
- C++笔记 第一讲