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 素数统计的更多相关文章

  1. 神奇的Noip模拟试题第一试 合理种植 枚举+技巧

    1.合理种植 (plant.pas/.c/.cpp) [问题描述] 大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职.他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干. 于是他如愿以偿 ...

  2. 神奇的Noip模拟试题一试 2 排队

    2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...

  3. 神奇的Noip模拟试题 T3 科技节 位运算

    3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...

  4. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  5. 9.23 noip模拟试题

      Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...

  6. 9.20 noip模拟试题

      Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...

  7. 神奇的NOIP模拟赛 T1 LGTB 玩扫雷

    LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...

  8. 11.14 noip模拟试题

      题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...

  9. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

随机推荐

  1. Docker-利用dockerfile来搭建tomcat服务

    在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中, ...

  2. (二)再议MII、RMII、GMII接口

    概述:         MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...

  3. iOS开发 UIPanGestureRecognizer手势抽象类

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@sel ...

  4. Jqplot使用总结之二(双Y轴)

    最近需要用Jqplot做双Y轴的Chart图,首先我找到了文档上的例子并对数据做了一些调整: 1.例子展示: var s1 = [["2002-01-01", 112000], [ ...

  5. JSON字符串如何转化成对象?

    解析 1.定义:是指将符合 JSON 语法规则的字符串转换成对象的过程. 2.不同的编程语言都提供了解析 JSON 字符串的方法,在这里主要讲解 JavaScript 中的解析方法.主要有三种: 1) ...

  6. Javascript的操作符

    1.一元加和减操作符主要用于基本的算术运算,也可以像Number()转型函数一样用于转换数据类型. 2.位操作符用于在最基本的层次上,即按内存中表示数据的位来操作数值. 3.正数直接以纯二进制格式存储 ...

  7. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志

    个人觉得profilter 跟 logger 功能差不多,logger的功能在于写入,profilter功能在于sql后及时显示分析.都是对sql执行的的分析:一个是写入log文件,一个是直接在页面展 ...

  8. onclick="test()"与onclick="return test()"的区别

    浏览器会对页面元素的某些操作产生默认行为比如a标签跳转,form表单的提交等如果是onclick="test()"则执行该函数,然后继续自己的默认行为 <a href=&qu ...

  9. (22)odoo 安装旧模块报错处理

    一些老版本的模块没有得到升级,所以经常碰到模块无法安装的问题. No module name osv 将模块的 from osv import osv,fields 改为 from openerp.o ...

  10. Redis 学习资料整理

    菜鸟爬坑--Redis学习与探索(二):Redis的数据类型 http://www.cnblogs.com/codediary/archive/2015/02/20/redisstudy-2.html ...