【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计
1. 素数统计
(pcount.pas/.c/.cpp)
【问题描述】
小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数。“这不是很简单吗?”小tan忍不住说。揣谙戈冷笑一下说:“等你们看到题目就知道了。”便转身离去。
果然,小tan被那极大的区间吓怕了,现在是你拯救她的时候。
【输入】
输入文件名为pcount.in。
输入一行两个正整数a和b,表示给定区间为[a,b]。
【输出】
输出文件名为pcount.out。
输出一个整数,表示区间内素数数量。
【输入输出样例】
pcount.in |
pcount.out |
1 17 |
7 |
【数据范围】
对于30%的数据,有n<m≤1,000;
对于60%的数据,有n<m≤1,000,000;
对于100%的数据,有n<m<2^31,m-n≤1,000,000。
解题报告:
看到这么大的数据,果然是被吓怕了。前一天才学的数论,这一次考试就考了两道题,虽然我只做了两道题。先说说这道题吧,这道题自己做的时候心想,反正都得不全分,干脆就把数组定小一点,得个六七十分吧。于是开始暴力筛数法,把1~m和1~n的素数都筛出来,然后相减,只不过要注意n是素数的情况,ans--;于是得了70。
正解:这么大的数组肯定不行,所以需要下标(数组)平移,把n~m之间的及大于sqrt(m)的平移到0~m-n的下标。然后扫一遍这个区间,把ans加上。但要注意特殊情况:n==1的时候,ans--;
值得注意的是:循环时把 j 定义为long long,因为当m很大时,i * i+ i 就超出了int的范围,这个时候会变为负数,然后无限循环,最后一组数据就超时了。
代码附下:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,m,ans;
const int maxn=;
bool vis1[maxn],vis2[maxn];
int main()
{
freopen("pcount.in","r",stdin);
freopen("pcount.out","w",stdout);
cin>>n>>m;
long long mid=sqrt(m)+;
for (long long i=;i<=mid;i++)
{
if (!vis1[i])
{
for (long long j=i*i;j<=mid;j+=i)//long long
vis1[j]=;
for (long long j=n/i*i;j<=m;j+=i)
if (j>i&&j>=n) vis2[j-n]=;
}
}
for (int i=;i+n<=m;i++)
if (!vis2[i]) ans++;
if (n==) ans--;
cout<<ans;
return ;
}
【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计的更多相关文章
- 神奇的Noip模拟试题第一试 合理种植 枚举+技巧
1.合理种植 (plant.pas/.c/.cpp) [问题描述] 大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职.他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干. 于是他如愿以偿 ...
- 神奇的Noip模拟试题一试 2 排队
2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...
- 神奇的Noip模拟试题 T3 科技节 位运算
3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- 9.23 noip模拟试题
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...
- 9.20 noip模拟试题
Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...
- 神奇的NOIP模拟赛 T1 LGTB 玩扫雷
LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...
- 11.14 noip模拟试题
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...
- 10.26 noip模拟试题
enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...
随机推荐
- C++ 多线程中的一个抛出异常
试了一下,和Java完全不同. 注意Java和C++对于多线程里面的一个线程抛出异常的影响,完全不同. Java里面,对于主线程和其他线程完全不受影响: C++里面,整个程序会退出,所有线程都会受影响 ...
- 转!sqlServer2000 表连接查询
在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...
- printf();
使用方式: ① uint8_t *rmt_str=0; rmt_str="ERROR"; printf("%s\r\n",rmt_str); ② int a=1 ...
- 按钮靠右css小结
按钮靠右 style="float:right" ,多按钮排版会相反 按钮内的字体靠右 style="text-align:right" 按钮离右边框距离 s ...
- spring源码深度解析-2功能扩展
容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFacto ...
- redirect模块的秘密
所有的redirect记录都在config/url_directs下面, 但是某个node/edit的redirect记录只包含redirect到自己的记录,且不验证url的合理性. 现在比如,a跳转 ...
- 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上。解决方法
- Unity5.3官方VR教程-系列1
如果你不是VR游戏或应用的开发者,可以选择无视下面的内容,这不是给普通用户看的~ 如果你之前曾经为Oculus Rift DK2或者Gear VR开发过,那么心里面一定曾经有千万个草泥马来回奔跑过.虽 ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- C#基础:泛型委托
泛型委托是委托的一种特殊形式,感觉看上去比较怪异,其实在使用的时候跟委托差不多,不过泛型委托更具有类型通用性. 就拿C#里最常见的委托EventHandler打比方.在.NET 2.0以前,也就是泛型 ...