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. PSR-0的规范。

  2. JavaScript的事件对象_其他属性和方法

    在标准的 DOM 事件中,event 对象包含与创建它的特定事件有关的属性和方法.触发的事件类型不一样,可用的属性和方法也不一样. 在这里,我们只看所有浏览器都兼容的属性或方法.首先第一个我们了解一下 ...

  3. 聊天界面之气泡文本cell(一)

    在实现qq聊天界面的过程中,使用UITableViewCell碰到了不少问题,这里还是记录一下以免遗忘. 气泡聊天cell的实现,网上最多的方法还是: 1.手动计算设置frame的值,文本的size使 ...

  4. 【论文阅读记录】Real-Time Correlative Scan Matching

    这篇文章是谷歌的Cartograph中实现real_time_correlative_scan_matcher的论文 Real-Time Correlative Scan MatchingEdwin ...

  5. Python策略模式实现源码分享

    1.让一个对象的某个方法可以随时改变,而不用更改对象的代码 2.对于动态类型的Python语言,不需要定义接口 3.基本的实现方法:用类作为参数传递 例如: 12_eg3.py class Movea ...

  6. 求出数组前面k个元素或数组中元素大于一半的元素(快速排序与堆排序的灵活运用)

    写这个的目的在于,说明快速排序的灵活运用.我们来看下关于快速排序中的一部分关键代码: 快速排序代码: int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quickso ...

  7. SAP标准价格修改

    标准MR21修改前期的价格,不会影响到当期. 相关配置 事务码OMRN. 如企业账期已经开到 2015 年 2 月,会计账期还可对 1月记账,配置后可修改1月物料价格.

  8. linux笔记:linux软件包管理,软件安装位置

    linux软件包简介 软件包分类:1.源码包(用C语言等编写的源代码,没有进行编译):脚本安装包(对源码包进行了安装优化的源码包)优点:开源,可修改可以自由选择所需的功能编译安装,更适合自己的系统,稳 ...

  9. 如何通过ildasm/ilasm修改assembly的IL代码

    原文地址:http://kb.cnblogs.com/page/101162/ 这段时间为跟踪一个Bug而焦头烂额,最后发现是Framework的问题,这让人多少有些绝望.所以到微软论坛提了个帖子,希 ...

  10. selenium+python笔记7

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 测试126邮箱的登陆功能 1.使用公共方法public. ...