Help Hanzo LightOJ - 1197(素数筛法)
Help Hanzo LightOJ - 1197
题目链接:
https://cn.vjudge.net/problem/26909/origin
题意:
求两个数a,b之间有多少个素数。
思路:
因为这两个数太大了,用任何办法都无法一次全部筛选出1到b的素数,所以对于这个题,我们只能够先筛选出比较小的一部分素数,再用这一部分的素数来筛选a,b之间的素数。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+20;
ll prime[maxn], psize;
//int factors[100][2], fsize;
bool isprime[maxn];
//long long MAX=1LL<<31+5;
//bitset<maxn>isprime;
void initPrimes()
{memset(isprime, true, sizeof(isprime));//isprime.set();isprime[0]=isprime[1]=0;for (int i=2; i<=maxn; i++){if(isprime[i]) prime[psize++]=i;for (int j=0; j<psize && i*prime[j]<=maxn; j++){isprime[prime[j]*i]=0;if (i%prime[j]==0) break;}}
}
//bitset<(maxn+100)/5>isprime2;
bool isprime2[100005];
int solve(long long a,long long b)
{//memset(isprime2,0,sizeof(isprime2));int res=0;if(a<=maxn-20&&b<=maxn-20){for(int i=a; i<=b; i++){if(isprime[i])res++;}return res;}for(int i=0;i<psize&&prime[i]*prime[i]<=b;i++){for(ll j=a/prime[i]*prime[i];j<=b;j+=prime[i]){if(j>=a&&j>prime[i])isprime2[j-a]=1 ;}}for(int i=0;i<=b-a;i++){if(!isprime2[i])res++;elseisprime2[i]=0;}return res;
}
int main()
{initPrimes();int t;scanf("%d",&t);for(int cas=1; cas<=t; cas++){long long a,b;scanf("%lld%lld",&a,&b);printf("Case %d: %d\n",cas,solve(a,b));}
}
Help Hanzo LightOJ - 1197(素数筛法)相关推荐
- Help Hanzo LightOJ - 1197 (素数 筛法)
题目地址:http://lightoj.com/volume_showproblem.php?problem=1197 求区间[a,b]之间有多少素数, (1 ≤ a ≤ b < 231, b ...
- Help Hanzo LightOJ - 1197
题目链接:https://cn.vjudge.net/problem/LightOJ-1197 Amakusa, the evil spiritual leader has captured the ...
- Help Hanzo(LightOJ - 1197)(欧拉筛 + 思维)
LightOJ - 1197 Help Hanzo 来源:LightOJ - 1197 Help Hanzo 题意: 判断a ~ b区间内,有多少个素数,a,b范围[1, 2 ^ 31 - 1],b ...
- LightOJ 1197 Help Hanzo
LightOJ 1197 Help Hanzo 题目链接 Amakusa, the evil spiritual leader has captured the beautiful princess ...
- 埃拉托色尼素数筛法(转)
原文:http://blog.csdn.net/ltyqljhwcm/article/details/52835805 1.算法原理 埃拉托色尼素数筛法是有古希腊数学家发明的一种快速求解范围内所有的素 ...
- P1865 A % B Problem (素数筛法,前缀和)
题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...
- 斐波那契数列的3种求法及几种素数筛法
递推法 #include<stdio.h> long long sum[40];//也可以不用开数组 int main() {int n;scanf("%d",& ...
- P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表)
P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表) 一:埃氏筛(时间复杂度--nloglogn) 重点:一个数x是合数,则它的倍数也是合数 //用埃氏筛生成 ...
- 欧拉筛法原理C语言,素数筛法
素数筛 自古以来,素数就是一个有众多人研究的东西,而素数筛也是这些研究成果中的一个 素数筛是用来快速生成一个素数表的东西,比起生成素数的幼稚算法及其优化的方法,素数筛的速度更快,但是也常常会出现很多奇 ...
最新文章
- 2019年25大人工智能趋势!一文看到未来
- ESXI设备开机自启动虚拟机
- 光脚丫学LINQ(002):筛选数据
- 中科燕园GIS外包-----基于ArcGIS的应急平台
- Docker入门-构建第一个Java程序
- 牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
- Spark编程指南V1.4.0(翻译)
- 卷积神经网络结构优化综述
- 高可用高并发的 9 种技术架构!
- sqlalchemy create engine
- 在iOS项目中引入MVVM
- 总结的太牛了,android实时推送!
- js中setTimeout与clearTimeout
- Java开发中,接口参数校验
- 两种预处理命令的写法的区别
- 蓝桥杯历年省赛真题汇总及题目详解
- 教你如何设置让Excel窗口总是在最前面
- 关于from scipy.misc import comb ImportError: cannot import name 'comb'的问题
- day_7:代理使用
- [SV]SystemVerilog学习笔记之struct union
热门文章
- lesson5: C++11
- YGG 与 Thirdverse 达成合作,将《足球小将》IP 带入 Web3
- Mysql 主从复制实战(学习笔记十三)
- 《0~3岁孩子的 正面管教》——备忘
- 如何提升自己的宣传效果?从这两个点开始
- 计算机开不了机怎么用u盘解决,电脑开不了机怎么重装系统实测操作
- 两个经纬度偏角_[转载]根据两点的经纬度求方位角和距离,等
- 织梦php数据库修改密码,如何使用phpmyadmin修改织梦后台密码
- matlab包络分析函数,数据包络分析 (MATLAB代码).doc
- 同厂玩伴---鸭子兄传