P8842 [传智杯 #4 初赛] 小卡与质数2
变态数学题(主考位运算与素数筛)。
读完题看起来有点难做,因为质数的出现是根本没有可以使用的规律。暴力的话也很好想,枚举 $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的更多相关文章
- P8844 [传智杯 #4 初赛] 小卡与落叶
简要题意 给出一个 \(n\) 个节点的以 \(1\) 为根的树,每一个节点 \(i\) 带权 \(w_i\),初始时所有节点的权均为 \(0\).有 \(m\) 个操作,支持以下操作: 1 x,对于 ...
- P8872 [传智杯 #5 初赛] D-莲子的物理热力学
题目链接:P8872 [传智杯 #5 初赛] D-莲子的物理热力学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考了题解,自己在这再写一遍 假设数组有序且经过m次操作后的数组最 ...
- 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解
留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...
- 第四届“传智杯”全国大学生IT技能大赛题解
目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...
- P8201 [传智杯 #4 决赛] [yLOI2021] 生活在树上(hard version)
个人思路: 首先,题目可以转化为是否存在 \(a,b\) 路径上一点 \(u\),满足 \(w_u = dis{1,a} \oplus dis{1,b} \oplus w_{lca(a,b)} \op ...
- 传智播客DotNet面试题
技术类面试.笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来) 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...
- Socket小项目的一些心得(鸣谢传智的教学视频)
Socket是一种封装了四层通信的整体抽象入口,通常也称作"套接字",这是常用的四层通信这是访问Socket的流程图,这个分为客户端和服务器端,其中服务器端有以下步骤去建立,前面的 ...
- 传智博客(JavaWeb方面的所有知识)听课记录(经典)
一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...
- 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)
卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│ 1.txt│ c语言经典案例效果图示.doc│ ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...
- 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)
J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│ 第一讲1.1C语言第一阶段.mp4│ 第二讲1.2c语言入门教程.mp4 ...
随机推荐
- 办公自动化-批量更新tar包内文件
最近工作有点忙,学习的时间也少了,为了提高工作效率,有时候我们需要自己写一些提高办公处理效率给的工具或者脚本或者程序. 比如,我目前遇到的一个事项,需要更新很多个tar包文件,把tar包内的某个文件替 ...
- 使用Docker部署服务
一.Docker概念 1.操作系统层面的虚拟化技术 2.隔离的进程独立于宿主和其它的隔离的进程 - 容器 3.GO语言开发 4.特点:高效的利用系统资源:快速的启动时间:一致的运行环境:持续交付和部署 ...
- Delphi CheckListBox 用法
for i := CheckListBox1.Items.Count-1 downto 0 do //从后面往前面删 begin if CheckListBox1.Checked[i] then // ...
- BUUCTF---传感器
题目 5555555595555A65556AA696AA6666666955 这是某压力传感器无线数据包解调后但未解码的报文(hex) 已知其ID为0xFED31F,请继续将报文完整解码,提交hex ...
- exGCD 2025/1/10
前言: 全文均为蒟蒻作者手搓 虽也参考了许多 [luogu 题解/某SDN/cnblogs.com] 但很多地方均为作者瞎编 如有错误务必救救孩子 File int GCD(int a,int b){ ...
- IP地址查询服务
IP地址查询站点 https://ip.cn/ http://ip.qq.com/ http://ip138.com/ https://www.apnic.net/ ... IP计算 ip地址在线计算 ...
- 2012R2双网卡路由的设定
目前T440服务器, os只能起步2012R2.intelWin联盟是实实在在的.在该os上,DB支持SQL2008. 你要安装SQL2005也可以.到网上查找攻略.那也是死去活来.还好.2008兼容 ...
- chatops
ChatOps是什么? ChatOps, 简单地说,这是一种方法,允许团队以聊天室的方式来协作和管理其基础结构.代码和数据的许多方面.通过使用聊天机器人和脚本,团队可以执行命令.查询信息,并将知识分发 ...
- 外网pnpm安装的node_modules包迁移到内网环境提示node_modules will be removed and reinstalled from scratch.Proceed?
背景 由于内网没有所需的node包,于是在外网使用pnpm install安装后将node_modules复制到内网的项目目录下,内网执行pnpm install后提示node_modules wil ...
- js判断对象任意深度的key属性是否存在,js的iset方法
方法一: 支持纯对象的obj // isset.js module.exports = (obj, keyPath) => { const keys = keyPath.split('.') ...