P1865 A % B Problem
(一道很水的题)
(反正我第一眼看的时候也是这么想的)
题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数n,范围m
接下来n行,每行两个整数 l,r 表示区间
输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 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
-----------------------------------------------------------------------------------------------------------------
第一眼一看的时候
特别开心
这不就是求素数嘛!
看了一眼数据范围
还可以
用线性的欧拉筛应该可以
于是上手就写
(我才不会说我写了两遍,第二边上的时候思路才定下来)
好不容易写完了
结果输入数不进去
a[++l]写成了a[l++]
于是进入了死循环
哎
好不容易过了样例
一提交t了5个点
啊哈??
不是线性的吗??(顿时懵逼)
于是看题解了(千万千万不要这样,动不动就看题解,真的是很不好的习惯)
题解居然是埃氏筛
啊哈??
再一看代码果然
先放一个我错误的代码!!!!!
以此为耻
#include<cstdio>
using namespace std;
long long n,m,a[],b[],c[],ans,len; //a存每个区间的素数个数,b存素数
long long l,r; inline long long read()
{
long long ans = ;
int p = ;
char ch = getchar();
while(ch < '' || ch > '')
{
if(ch == '-')
p = -;
ch = getchar();
}
while(ch >= ''&&ch <='')
{
(ans *= )+= ch-'';
ch = getchar();
}
return ans * p;
} int main()
{
a[] = ;
a[] = ;
b[] = ;
c[] = ;//0为不是
c[] = ;// 1为是
len = ;
n = read();
m = read(); for(long long i=;i<=m;i++)//遍历每个数
for(long long j=;j<=len;j++)//看他能不能被素数整除
{
if(i % b[j]== ) //被素数整除
{
a[i]=a[i-];
break;
}
else
if(j == len)//全用素数除过了
{
c[i] = ;
a[i] = a[i - ] + ;
b[++len] = i;
break;
}
} for(long long i = ;i <= n;i++)
{
l = read();
r = read();
if(l>=&&r <= m)//在范围内
{
if(c[l] == )
{
printf("%lld\n",a[r] - a[l]+);
}
else
{
printf("%lld\n",a[r]-a[l]);
}
}
else
printf("Crossing the line\n");
}
return ;
}
哎确实是循环多了好多
还是放题解!!!!!!
#include<bits/stdc++.h>
using namespace std; int f[];
bool vis[]; void shai(int n)
{
f[]=;
vis[]=true;
for(int i=;i<=n;i++)
{
if(vis[i]==false) //在筛里进行前缀和
{
f[i]=f[i-]+;//前缀和计算 这处
for(int j=i+i;j<=n;j=j+i)
{
vis[j]=true;//标记操作
}
}
else f[i]=f[i-];//前缀和转移 和这处就很妙了
}
} int main()
{
int n,m;
scanf("%d%d",&m,&n);
shai(n);
for(int i=;i<=m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
if(l< || r>n) cout<<"Crossing the line"<<endl;//判断是否超出区间
else
{
int y=f[r]-f[l-];//此处已经修改
cout<<y<<endl;
}
}
return ;
}
换个角度从判断素数,变成判断合数;
埃氏筛
本质上就是从2开始把它除本身的倍数全部删去,以此类推
区间和可以用前缀和处理;
P1865 A % B Problem的更多相关文章
- 洛谷P1865 A % B Problem
1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...
- 【luogu P1865 A % B Problem】 题解
题目链接:https://www.luogu.org/problemnew/show/P1865 其实就是埃拉托色尼筛素数模板... 好像每个数暴力枚举到sqrt()也可以...就算当我无聊练手罢 # ...
- [线性筛]P1865 A % B Problem
题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...
- 【数论线性筛】洛谷P1865 A%B problem
题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...
- P1865 A % B Problem 素数筛
题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...
- 洛谷 P1865 A % B Problem
题目戳 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格 ...
- 洛谷 P1865 A % B Problem[筛素数/前缀和思想/区间质数个数]
题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...
- [Luogu] P1865 A % B Problem
题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...
- 洛谷 P1865 A % B Problem(求区间质数个数)
题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...
随机推荐
- jQ效果:jQuery之插件开发短信发送倒计时功能
实现的主要功能如下: 1.点击按钮的时候,可以进行倒计时,倒计时自定义. 2.当接收短信失败后,倒计时停止,可点击重新发送短信. 3.点击的元素支持一般标签和input标签. html代码: < ...
- 【代码笔记】Web-JavaScript-JavaScript 条件语句
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- openlayers3 实现测距 面积
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Tars http服务
http服务 发布到平台后可以直接使用 http 请求来调用,注意发布服务时选择 非 tars 协议! 1,创建一个 springboot 项目,并在启动类添加 @EnableTarsServer 注 ...
- tornado 初解
对于使用习惯Django的我来说,tornado实在是很简陋,没有那么多复杂的文件分类. 在tornado中,一个简单web只需要十几行简单的代码就OK了 import tornado.web imp ...
- WPF:自定义Metro样式文件夹选择对话框FolderBrowserDialog
1.前言 WPF并没有文件选择对话框,要用也就只有使用Winform版的控件.至今我也没有寻找到一个WPF版本的文件选择对话框. 可能是我眼浊,如果各位知道有功能比较健全的WPF版文件选择对话框.文件 ...
- Android广播机制的基本使用
一提到广播我们第一感觉就会联想到小时候村里面的广播,安卓的广播机制也是类似于大喇叭.有发送广播的地方,也有接收广播的地方.但是具体怎么操作呢,我们来一步一步的看下去~ 安卓的广播种类 系统发送的广播: ...
- Jmeter 登入、新增、查询、修改、删除,动态传参。
1.设置HTTP Request Defaults 请求默认值,这样之后每次请求同一个域名端口的时候后都不用输入协议.域名.端口号. 2.输入[登入]的接口号. 3.设置HTTP header ...
- Ubuntu下启动 Redis时, 提示 "Can't open the log file: Permission denied failed"
问题来源:在删除var目录下的log文件时,将redis文件夹删除了.然后在重启时:/etc/init.d/redis-server start,提示: Starting redis-server: ...
- vue使用JS的形式进行路由导航
// 注意: 一定要区分 this.$route 和 this.$router 这两个对象, // 其中: this.$route 是路由[参数对象],所有路由中的参数, params, query ...