传送门

考场上魔改了一下线性筛,觉得要筛到 \(\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的更多相关文章

  1. 【数论】8.30题解-prime素数密度 洛谷p1835

    prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...

  2. 【题解】UVA10140 [Prime Distance]

    [题解]UVA10140 Prime Distance 哈哈哈哈\(miller-rabbin\)水过去了哈哈哈 还能怎么办呢?\(miller-rabbin\)直接搞.枚举即可,还跑得飞快. 当然此 ...

  3. 【题解】CF45G Prime Problem

    [题解]CF45G Prime Problem 哥德巴赫板子题? \(\frac{n(n+1)}{2}\)若是质数,则不需要分了. 上式 若是奇数,那么拆成2和另一个数. 上式 若是偶数吗,直接\(O ...

  4. CF912E Prime Gift题解(搜索+二分答案)

    CF912E Prime Gift题解(搜索+二分答案) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1314956 洛谷题目链接 $     $ CF题目 ...

  5. HDU 1016 Prime Ring Problem 题解

    Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...

  6. poj2689 Prime Distance题解报告

    题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...

  7. 题解-hdu2866 Special Prime

    Problem hdu-2866 题意:求区间\([2,L]\)有多少素数\(p\)满足\(n^3+pn^2=m^3\),其中\(n,m\)属于任意整数 Solution 原式等价于\(n^2(p+n ...

  8. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  9. LintCode 896. Prime Product 简明题解

    Given a non-repeating prime array arr, and each prime number is used at most once, find all the prod ...

随机推荐

  1. buu 刮开有奖

    一.查壳, 二.拖入ida,分析 直接搜字符串完全没头绪,在看了大佬的wp才找到了,关键函数. 明显那个String就是我们要求的flag,要开始分析程序. 字符串长度为8,同时这个函数对字符串进行了 ...

  2. 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 ...

  3. sort,wc,uniq 排序与统计命令

    sort命令 语法:sort [parameter] [file or stdin]参数: -f:忽略大小写的差异,例如A和a视为编码相同 -b:忽略最前面的空格符部分 -n:使用"纯数字& ...

  4. Podistributor播客分发系统介绍

    特性 向用户暴露节目的别名 URL ,在用户访问时重定向至真实的目标资源 URL ,以高效地进行 CDN 切换和便捷地建立失效转移机制. 异步转发请求至统计服务,以解耦用户请求和数据统计,可方便地接入 ...

  5. Java基础00-集合基础15

    1. 集合基础 1.1 集合概述 1.2 ArrayList构造方法和添加方法 代码示例: 想通过指定索引添加到最后一个位置的话就填写,现有索引的+1,比如3个索引就是4.如果在指定索引的位置添加没有 ...

  6. Centos7下的rabbitmq-server-3.8.11安装配置

    推荐大家看看这篇文章:https://blog.csdn.net/qq_27669839/article/details/113418827 下载安装文件 在网上去下载rabbmitmq-3.8.11 ...

  7. python3执行.sql文件

    这个脚本主要是遍历执行文件夹下的sql文件,但是没有辨别文件的格式,所以文件夹下只能够放.sql文件,否则会报错哈. 我的sql文件夹与执行的文件平级,所以dir_path就是sql,大家依照自己的路 ...

  8. IO流之节点流(字符流)和数据流关闭

    ​输入流----Reader 1 public class Reader { 2 public static void main(String[] args) throws Exception { 3 ...

  9. Html模板引擎Handlerbars使用demo

    1.自定义demo <html> <head> <script src="./handlebars-v4.0.12.js"></scrip ...

  10. 免杀mimikatz

    mimikatz源码  下载地址https://github.com/gentilkiwi/mimikatz/releases/tag/2.2.0-20210709 使用vs2019打开工程mimik ...