题解 Prime
考场上魔改了一下线性筛,觉得要筛到 \(\frac{R}{2}\) 就没让它跑
其实正解就是这样,只不过由于接下来类似埃氏筛的过程只要筛到根号就行了
- 线性筛有的时候其实并不需要筛到 \(\frac{n}{2}\),如果接下来需要枚举倍数,注意可能只需要枚举到根号就行了
发现 \(R\) 的范围很大,但 \(R-L\) 的范围有限
而 \(L\) 的范围只有 \(1e7\),可以筛出质数来,再用类似埃氏筛的方法筛掉 \([L, R]\) 内的类质数
然后枚举一遍统计个数就好了
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 10000010
#define ll long long
#define reg register int
#define rll register long long
//#define int long long
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline ll read() {
ll ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
ll l, r, k;
int pri[N], pcnt, ans;
bool npri[N];
namespace force{
ll ans;
void solve() {
for (ll i=l; i<=r; ++i) {
for (ll j=2; j<=min(i-1, k); ++j)
if (!(i%j)) goto jump;
//printf("%lld,%lld\n", i, (ans^=i));
//printf("%lld ", i);
ans^=i;
jump: ;
}
//printf("\n");
printf("%lld\n", ans);
exit(0);
}
}
namespace task1{
void solve() {
for (reg i=2,limr=r,limk=k; i<=limr; ++i) {
if (i<=limk && !npri[i]) pri[++pcnt]=i;
for (reg j=1; j<=pcnt&&1ll*i*pri[j]<=r; ++j) {
npri[i*pri[j]]=1;
if (!(i%pri[j])) break;
}
}
for (reg i=l,limr=r; i<=limr; ++i)
if (!npri[i]) ans^=i; //, cout<<i<<' '; cout<<endl;
printf("%d\n", ans);
exit(0);
}
}
namespace task2{
void solve() {
ll ans=0;
for (rll i=l; i<=r; ++i) ans^=i;
printf("%lld\n", ans);
exit(0);
}
}
namespace task3{
bool nspr[N];
void solve() {
for (reg i=2,lim=min((ll)(sqrt(r)),k); i<=lim; ++i) {
if (!npri[i]) pri[++pcnt]=i;
for (reg j=1; j<=pcnt&&1ll*i*pri[j]<=lim; ++j) {
npri[i*pri[j]]=1;
if (!(i%pri[j])) break;
}
}
for (reg i=1; i<=pcnt; ++i) {
//cout<<"i: "<<i<<' '<<pri[i]<<endl;
for (rll j=max((l-1)/pri[i]+1,2ll),lim=r/pri[i]; j<=lim; ++j) {
//cout<<j*pri[i]<<' '<<j*pri[i]-l<<endl;
nspr[j*pri[i]-l]=1; //, cout<<j*pri[i]<<endl;
}
}
ll ans=0;
//for (int i=0; i<=100; ++i) cout<<nspr[i]<<' '; cout<<endl;
for (reg i=0,lim=r-l+1; i<lim; ++i) if (!nspr[i]) ans^=(l+i);
printf("%lld\n", ans);
exit(0);
}
}
signed main()
{
l=read(); r=read(); k=read();
//force::solve();
if (k==1) task2::solve();
else if (r<=1000) force::solve();
else if (r<=(ll)(1e7)) task1::solve();
else task3::solve();
return 0;
}
题解 Prime的更多相关文章
- 【数论】8.30题解-prime素数密度 洛谷p1835
prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...
- 【题解】UVA10140 [Prime Distance]
[题解]UVA10140 Prime Distance 哈哈哈哈\(miller-rabbin\)水过去了哈哈哈 还能怎么办呢?\(miller-rabbin\)直接搞.枚举即可,还跑得飞快. 当然此 ...
- 【题解】CF45G Prime Problem
[题解]CF45G Prime Problem 哥德巴赫板子题? \(\frac{n(n+1)}{2}\)若是质数,则不需要分了. 上式 若是奇数,那么拆成2和另一个数. 上式 若是偶数吗,直接\(O ...
- CF912E Prime Gift题解(搜索+二分答案)
CF912E Prime Gift题解(搜索+二分答案) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1314956 洛谷题目链接 $ $ CF题目 ...
- HDU 1016 Prime Ring Problem 题解
Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...
- poj2689 Prime Distance题解报告
题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...
- 题解-hdu2866 Special Prime
Problem hdu-2866 题意:求区间\([2,L]\)有多少素数\(p\)满足\(n^3+pn^2=m^3\),其中\(n,m\)属于任意整数 Solution 原式等价于\(n^2(p+n ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
- LintCode 896. Prime Product 简明题解
Given a non-repeating prime array arr, and each prime number is used at most once, find all the prod ...
随机推荐
- buu 刮开有奖
一.查壳, 二.拖入ida,分析 直接搜字符串完全没头绪,在看了大佬的wp才找到了,关键函数. 明显那个String就是我们要求的flag,要开始分析程序. 字符串长度为8,同时这个函数对字符串进行了 ...
- django 使用jpype 报错:raise+OSError('JVM+cannot+be+restarted')
#调用jar包 def getJar(arg1,arg2): jarpath = os.path.join(os.path.abspath('.'), 'tools/GetTest-1.0-SNAPS ...
- sort,wc,uniq 排序与统计命令
sort命令 语法:sort [parameter] [file or stdin]参数: -f:忽略大小写的差异,例如A和a视为编码相同 -b:忽略最前面的空格符部分 -n:使用"纯数字& ...
- Podistributor播客分发系统介绍
特性 向用户暴露节目的别名 URL ,在用户访问时重定向至真实的目标资源 URL ,以高效地进行 CDN 切换和便捷地建立失效转移机制. 异步转发请求至统计服务,以解耦用户请求和数据统计,可方便地接入 ...
- Java基础00-集合基础15
1. 集合基础 1.1 集合概述 1.2 ArrayList构造方法和添加方法 代码示例: 想通过指定索引添加到最后一个位置的话就填写,现有索引的+1,比如3个索引就是4.如果在指定索引的位置添加没有 ...
- Centos7下的rabbitmq-server-3.8.11安装配置
推荐大家看看这篇文章:https://blog.csdn.net/qq_27669839/article/details/113418827 下载安装文件 在网上去下载rabbmitmq-3.8.11 ...
- python3执行.sql文件
这个脚本主要是遍历执行文件夹下的sql文件,但是没有辨别文件的格式,所以文件夹下只能够放.sql文件,否则会报错哈. 我的sql文件夹与执行的文件平级,所以dir_path就是sql,大家依照自己的路 ...
- IO流之节点流(字符流)和数据流关闭
输入流----Reader 1 public class Reader { 2 public static void main(String[] args) throws Exception { 3 ...
- Html模板引擎Handlerbars使用demo
1.自定义demo <html> <head> <script src="./handlebars-v4.0.12.js"></scrip ...
- 免杀mimikatz
mimikatz源码 下载地址https://github.com/gentilkiwi/mimikatz/releases/tag/2.2.0-20210709 使用vs2019打开工程mimik ...