传送门

变态数学题(主考位运算与素数筛)。

读完题看起来有点难做,因为质数的出现是根本没有可以使用的规律。暴力的话也很好想,枚举 $y$。但是肯定会超时。我们也可以换个方向枚举。对,筛出素数,再返过去判断有多少个素数符合条件,但任然会超时。

再思考一下,$x$ 异或上什么样的数才能使结果小于 $x$?

注意下面的步骤需要草稿纸推演,不然会有点难理解。

我们设符合条件的素数为 $k$ ,我们设 $k$ 的二进制中最高位是第 $M$ 位,不难发现,只有在 $x$ 的第 $M$ 位上也是 $1$ 的时候,$k$ 异或 $x$ 的结果小于 $x$(这一步若实在想不通的可以拉到文末,查看证明过程)。

随即。我们用素数筛,并统计范围内所有素数的最高位是哪一位,对于每个询问把 $x$ 每位拆开,若发现某一位是 $1$,则加上桶里已经计算好的,二进制数该位为 $1$ 的素数个数。

代码奉上:

#include<iostream>
using namespace std;
int T,n,m,ans;
int zhi[2000010],cnt[26];
bool f[2000010];
void IAKchuanzhibei(){
//素数筛 (欧拉筛法)
for(int i=2;i<=2000000;i++){
if(!f[i])zhi[++m]=i;
for(int j=1;j<=m&&i*zhi[j]<=2000000;j++){
f[i*zhi[j]]=1;
if(!(i%(zhi[j])))break;
}
}
//开桶记录
for(int i=1;i<=m;i++)
for(int j=25;j>=1;j--)//由于1000000内最大的质数为999983,转成二进制为1111 0100 0010 0010 1111,共24位,为保险起见,这里从25开始计算
if(zhi[i]&(1<<(j-1))){
cnt[j]++;//计算当质数为j位时,一共的个数
break;
}
}
int main()
{
//预处理
IAKchuanzhibei(); cin>>T;
while(T--)
{
cin>>n;
ans=0;
for(int i=25;i>=1;i--) if(n&(1<<(i-1))) ans+=cnt[i];//加上所有符合条件的素数
cout<<ans<<endl;
}
return 0;
}

证明过程:

观点一:那么 $k$ 异或 $x$ 的结果从 $M+1$ 位开始与 $x$ 的 $M+1$ 位开始的部分相同。因为 $k$ 的 $M+1$ 位以上的部分均为 $0$,因为 $1$ 异或 $0$ 的结果为 $1$,$0$ 异或 $0$ 的结果为 $0$,所以保持不变。

观点二:那么重点来到 $M$ 位,由于 $k$ 的 $M$ 位一定为 $1$,那么如果 $x$ 的 $M$ 位也为 $1$,异或一下结果为 $0$,即小于原来 $x$ 的 $M$ 位,那么异或的结果一定小于 $x$。若 $x$ 的 $M$ 位为 $0$,则反之。


我们设 $x=13$,并拿质数 $3$ 和 $5$ 举例。

$13$ 的二进制:$1101$。

$3$ 的二进制:$0011$ 异或结果:$1110$。

前两位与 $1101$ 相同(观点一)。

第二位($M$ 位)为 $1$,大于原来的 $0$。所以无论后面几位为什么,异或结果都比 $1101$ 大。(观点二)。


$5$ 的二进制:$0101$ 异或结果:$1000$。

前一位与 $1101$ 相同(观点一)。

第三位($M$ 位)为 $0$,小于原来的 $1$。所以无论后面几位为什么,异或结果都比 $1101$ 小。(观点二)。

P8842 [传智杯 #4 初赛] 小卡与质数2的更多相关文章

  1. P8844 [传智杯 #4 初赛] 小卡与落叶

    简要题意 给出一个 \(n\) 个节点的以 \(1\) 为根的树,每一个节点 \(i\) 带权 \(w_i\),初始时所有节点的权均为 \(0\).有 \(m\) 个操作,支持以下操作: 1 x,对于 ...

  2. P8872 [传智杯 #5 初赛] D-莲子的物理热力学

    题目链接:P8872 [传智杯 #5 初赛] D-莲子的物理热力学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考了题解,自己在这再写一遍 假设数组有序且经过m次操作后的数组最 ...

  3. 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解

    留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...

  4. 第四届“传智杯”全国大学生IT技能大赛题解

    目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...

  5. P8201 [传智杯 #4 决赛] [yLOI2021] 生活在树上(hard version)

    个人思路: 首先,题目可以转化为是否存在 \(a,b\) 路径上一点 \(u\),满足 \(w_u = dis{1,a} \oplus dis{1,b} \oplus w_{lca(a,b)} \op ...

  6. 传智播客DotNet面试题

    技术类面试.笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来) 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...

  7. Socket小项目的一些心得(鸣谢传智的教学视频)

    Socket是一种封装了四层通信的整体抽象入口,通常也称作"套接字",这是常用的四层通信这是访问Socket的流程图,这个分为客户端和服务器端,其中服务器端有以下步骤去建立,前面的 ...

  8. 传智博客(JavaWeb方面的所有知识)听课记录(经典)

    一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...

  9. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  10. 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)

     J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│      第一讲1.1C语言第一阶段.mp4│      第二讲1.2c语言入门教程.mp4 ...

随机推荐

  1. mongodb 数据库操作——备份 还原 导出 导入

    mongodump备份数据库 命令格式 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户,可以去掉-u和-p. 如果导出本机 ...

  2. MUX-VLAN

    MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,它通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式. 一.基本概念 MUX VLAN分为主 ...

  3. 关于普通程序员该如何参与AI学习的三个建议以及自己的实践

    大部分程序员在学习大语言模型的时候都比较痛苦,感觉AI是如此之近又如此之远,仿佛能搞明白一点,又好像什么也没明白.就像我们在很远的地方看珠穆拉玛峰,感觉它就像一个不大的山包,感觉只要自己做足准备咬咬牙 ...

  4. IvorySQL 4.0 之兼容 Oracle 包功能设计思路解读

    日前,IvorySQL 4.0 发布,该版本新增了兼容 Oracle 包功能的新特性. 为了大家能够更好地理解和使用 IvorySQL 4.0,本文将简要介绍实现此功能时的设计思路. Oracle 的 ...

  5. PLSQL中查询数据的时候查询结果显示中文乱码

    要需要很努力才能看起来毫不费力.....1.在PLSQL中查询数据的时候查询结果显示中文乱码这里写图片描述2.需要在环境变量中新建两个环境变量:第一个:设置 NLS_LANG=SIMPLIFIED C ...

  6. BUUCTF---传感器

    题目 5555555595555A65556AA696AA6666666955 这是某压力传感器无线数据包解调后但未解码的报文(hex) 已知其ID为0xFED31F,请继续将报文完整解码,提交hex ...

  7. 异常--java进阶day08

    1.异常 java中,所有的异常都是类 2.异常的体系结构 3.编译时异常与运行时异常 1.编译时异常 语法完全正确,但是代码就是会报错,如下图 上图中,写的是时间格式化类的使用,parse方法将给的 ...

  8. DEF4Delphi-master的安装

    保姆教程 d2007的TWEBbrowser因为用的太老的IE内核.现在的浏览器上的功能呈现就卡住了. 那么DEF4Delphi效果非常好. 如何安装后成功运行.很简单.直接去:https://git ...

  9. 移除任务栏右端"显示桌面"按钮-AutoIt

    核心代码 $hwnd = WinGetHandle("[CLASS:Shell_TrayWnd]", "") ControlHide($hwnd, " ...

  10. unity手机花屏

    关于Camera组件中Clear Flags的理解 - 知乎 (zhihu.com) https://blog.csdn.net/yanchezuo/article/details/77337755 ...