LightOJ1197【数学】
引自:WONTER
题意:
给你两个数,a,b,让你求区间[a,b]里面有多少个素数;
思路:
首先要知道,我们要想筛 [1, b] 中所有的素数,只需要用到 [1, sqrt(b)] 中的所有素数来筛就可以了。
假设我们是求
[1, b] 中所有的素数,我们就只需要打表出 [1, sqrt(b)] 的素数,然后用这些素数直接去套用常规的素数筛选方法就好了,也就是(j,但由于 b < 2^31 数据太大,我们不能直接开这么大的空间,就算能开,一个一个的置
= prime[i] * 2; j <= b; j += prime[i]) isPrime[j] = false
false 也会 TLE
由于
a 和 b 的范围太大,直接素数筛肯定不可以的,但注意到 b - a <= 100000,所以可以利用这一点,减少空间的使用。所以
j 就从第一个大于 a 的 prime[i] 的倍数开始,其他的不变,并且我们置为 false 的时候也不是置isPrime[j],因为这个 j 会很大,我们把 j 离散化,置
= falseisPrime[j即可,最后统计 [0, b - a] 中有多少个 isPrime[j]是 true 就可以了
- a] = false
但要特判
a 为 1 的时候,1 也被算成素数了,这个时候要减去。
这里有一个小小的CASE就是:
求>=a的最小b倍;
①:大哥的写法:(a+b-1)/b*b;没有严格证明。。
②:队友写法:a+b-a%b,但还要判断是不是a%b!=0;
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=1e5+10;
bool isprime[N];
vector<int>prime; void init()
{
prime.clear();
for(int i=1;i<=55000;i++)
{
if(i&1)
isprime[i]=true;
else isprime[i]=false;
}
isprime[2]=1;
for(int i=2;i<=55000;i++)
{
if(isprime[i])
{
prime.push_back(i);
for(int j=i+i;j<=55000;j+=i)
isprime[j]=false;
}
}
} int main()
{
init();
int a,b;
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
memset(isprime,true,sizeof(isprime));
for(int i=0;i<prime.size();i++)
{
if(1ll*prime[i]*prime[i]>b)
break;
LL j;
if(a/prime[i]<2)
j=prime[i]+prime[i];
else
j=((1ll*a-1)/prime[i]+1)*prime[i];
while(j<=b)
{
isprime[j-a]=false;
j+=prime[i];
}
}
int num=b-a;
int ans=0;
for(int i=0;i<=num;i++)
{
if(isprime[i])
ans++;
}
if(a==1)
ans--;
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}
LightOJ1197【数学】的更多相关文章
- 数学思想:为何我们把 x²读作x平方
要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...
- 速算1/Sqrt(x)背后的数学原理
概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...
- MarkDown+LaTex 数学内容编辑样例收集
$\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...
- 深度学习笔记——PCA原理与数学推倒详解
PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...
- Sql Server函数全解<二>数学函数
阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...
- *HDU 2451 数学
Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 如何解决Maple的应用在数学中
对任意数学和技术学科的研究员.教师和学生而言,Maple是一个必备的工具.通过Maple,教师将复杂数学问题注入生命,学生的精力集中在概念理解上而不是如何使用工具上,研究员可以开发更复杂的算法或模型. ...
- 如何让Maple中的数学引擎进入你的桌面应用程序和网站
MapleNET数学服务套件将Maple 2015强大的数学引擎引入您的应用程序和网站.使用MapleNET,您可以添加数学计算和可视化功能到网页和桌面程序中,通过互联网/局域网分享“活”的Maple ...
- 【原创】开源Math.NET基础数学类库使用(07)常用的数学物理常数
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 1.前 ...
随机推荐
- fabric-ca安装
1.Go版本1.7+(具体可参考Linux安装Go语言) 2.GOPATH环境变量正确配置 export GOROOT=/usr/local/go export GOPATH=/opt/gopath ...
- Struts2拦截器 解决登录问题
一.了解Struts2 拦截器[Interceptor] 拦截器的工作原理如图 拦截器是由每一个action请求(request)都包装在一系列的拦截器的内部,通过redirectAction再一次 ...
- 第 2 章 第 9 题 顺序 & 二分搜索效率分析问题
问题分析 顺序搜索的时间复杂度是O( n ),二分搜索的时间复杂度级别是O( lgn ).但这并不代表二分的时间开销就一定比顺序的小,因为二分搜索有个前提:元素必须要是有序的.如果仅仅为了二分搜索几个 ...
- SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第二天任务攻略
眼看实验室就要关门了.走之前写一下解题过程(事实上大家都等着第三题出来吧大概-=). 高速传送门:http://segmentfault.com/game/2 那么接昨天的博客,今天的题目是这种: 完 ...
- Delphi的类方法不是静态方法
Delphi中,类方法不是你理解的静态方法 Delphi中的类方法与C++类中的static方法完全没有可比性.Delphi中的类方法是有Self的,而Self就是类本身(注意不是对象),而这个Sel ...
- smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强
从标题来看,CMOD 是树木,smod 是树枝. 1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. 1.2 User exits (Function module exits) ...
- 【R】R语言生成随机数
1.概述 作为一种语言进行统计分析,R有一个随机数生成各种统计分布功能的综合性图书馆.R语言可以针对不同的分布,生成该分布下的随机数.其中,有许多常用的个分布可以直接调用.本文简单介绍生成常用分布随机 ...
- appium(4)-Automating mobile web apps
Automating mobile web apps If you’re interested in automating your web app in Mobile Safari on iOS o ...
- (C)struct结构体指针
结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员:其二是指向结构的指针(称为结构指针). 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点. 结构指 ...
- POJ 1088 滑雪 ( DFS+动态规划思想 )
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 79519 Accepted: 29581 Description ...