[Luogu]A%BProblem——线性筛素数与前缀和
题目描述
题目背景
题目名称是吸引你点进来的【你怎么知道的】
实际上该题还是很水的【有种不祥的预感。。】
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数n,范围m接下来n行,每行两个整数 l,r 表示区间。
输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line
输入输出样例
输入样例:
2 5
1 3
2 6
输出样例:
2
Crossing the line
说明
数据范围和约定
对于20%的数据 1<=n<=10 1<=m<=10
对于100%的数据 1<=n<=1000 1<=m<=1000000 -10^9<=l<=r<=10^9 1<=t<=1000000【吓死我了。。】
题目分析
这题是一道相对基础的数论题,就是求区间素数。然而普通的暴力枚举是绝对会超时的,在这里就不给出暴搜代码了(写了好久的优化,连暴搜都不会写了…),那么,如何改进算法呢?这里给出两个优化:线筛素数和前缀和(如果神牛有更好的意见请无视其方法并在下方评论写出最优方案,本蒟蒻需要你们的帮助,飞出垃圾堆…)
百科·线性筛素数
用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。(本方法由欧拉大佬荣誉出品~)
前缀和
先分解为一个小问题:
给定n个数ai以及m个询问。
每次询问一段区间的和。
复杂度O(n+m)。
我们可以这样想:
令s[i]=s[i−1]+a[i]" role="presentation" style="position: relative;">s[i]=s[i−1]+a[i]s[i]=s[i−1]+a[i]。
于是有s[i]=a[1]+a[2]+…+a[i]" role="presentation" style="position: relative;">s[i]=a[1]+a[2]+…+a[i]s[i]=a[1]+a[2]+…+a[i]。
求∑a[i]|(i=l,l+1...,r)" role="presentation" style="position: relative;">∑a[i]|(i=l,l+1...,r)∑a[i]|(i=l,l+1...,r)相当于是s[r]−s[l−1]" role="presentation" style="position: relative;">s[r]−s[l−1]s[r]−s[l−1].
我们可以先用欧拉大佬的线筛素数求出区间1~R的素数个数再减去1~L的素数个数即为答案。嗯….于是…就有了代码。
#include<bits/stdc++.h>
using namespace std;
int n,m,l,r,cont[1000005];
bool isPrime[1000005];
int main()
{
scanf("%d%d",&n,&m);
memset(isPrime,0,sizeof(isPrime));
isPrime[1]=true;
for(int i=2;i<=sqrt(m);i++)
{
if(isPrime[i]==0)
{
for(int j=2*i;j<=m;j+=i)
isPrime[j]=true;
cont[i]=cont[i-1]+1;
}
else cont[i]=cont[i-1];
}
for(int i=1;i<=n;i++)
{
scanf("%d%d",&l,&r);
if(l<1||r>m)
printf("Crossing the line\n");
else
printf("%d\n",cont[r]-cont[l-1]);
}
}
[Luogu]A%BProblem——线性筛素数与前缀和的更多相关文章
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
- 洛谷 P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...
- ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)
题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...
- 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...
- 洛谷 P3383 【模板】线性筛素数-线性筛素数(欧拉筛素数)O(n)基础题贴个板子备忘
P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...
- leetcode 204. Count Primes(线性筛素数)
Description: Count the number of prime numbers less than a non-negative number, n. 题解:就是线性筛素数的模板题. c ...
- [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...
- C++ 线性筛素数
今天要写一篇亲民的博客了,尽力帮助一下那些不会线性筛素数或者突然忘记线性筛素数的大佬. 众所周知,一个素数的倍数肯定不是素数(废话).所以我们可以找到一个方法,普通的筛法(其实不算筛,普通的是判断一个 ...
- 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)
题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ...
随机推荐
- 使用.gitignore删除Github上的.idea文件
环境:windows + git bash. 一.问题来源 由于之前用Goland建立Golang工程时,生成了.idea文件,不小心上传至Github: 所以尝试用.gitignore进行忽略不上传 ...
- 在windows 上自动重启 tomcat 的方法
在windows 上自动重启 tomcat 的方法 实现思路: Windows 上监控tomcat 进程并且自动重启的脚本 一类是 定时重启 tomcat 一类是 监控并重启 写一个守护tomcat进 ...
- php冒泡排序详解笔记
冒泡 /* * 冒泡排序(从小到大) * 介绍: * 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. * 思路: * 比较相邻的元素.如果第一个比第二个大,就交换他 ...
- C++ Addon Async 异步机制
线程队列: libuv,window 可在libuv官网下载相应版本 opencv: 编译的时候opencv的位数要和 node的bit 一致 兼容electron : node-gyp rebu ...
- 对unicode数据进行部分replace
unicode = u'\u9879\u76ee\u7ba1\u7406\u90e8' print unicode #项目管理部 unicode = unicode.replace("项目& ...
- Windows 环境下 wampserver 与 phpStudy 的环境配置
一. wamperserver 1.下载好安装到本地指定目录,官网下载地址 http://www.wampserver.com 2.根据自己实际的安装路径,D:\pc\wampserver\wamp ...
- JDK线程池的拒绝策略
关于新疆服务请求未带入来话原因的问题 经核查,该问题是由于立单接口内部没有成功调用接续的 “更新来电原因接口”导致的,接续测更新来电原因接口编码:NGCCT_UPDATESRFLAG_PUT ,立单接 ...
- asp.net session锁导致ajax请求阻塞
问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?答:Session实现了Reader/Writer的锁机制:当页面对Session具有可写功能(即页面有<%@Pag ...
- 剑指offer——python【第30题】连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- Python学习之旅(十一)
Python基础知识(10):函数(Ⅱ) 一.全局变量和局部变量 局部变量:在函数内定义的变量,在函数内使用 全局变量:在函数外定义的变量,在程序任何地方都可以使用 1.全局变量与局部变量同名 这时函 ...