第四届传智杯全国大学生IT技能大赛 初赛B组题解 -- D题
题目:小卡与质数2
Description
小卡最近迷上了质数,所以他想把任何一个数都转化为质数!
小卡有 T 次询问,每次给你一个数字 x,问有多少个比 x 小的非负整数 y,使得 x⊕y 是质数,其中 ⊕ 表示按位异或。
Input
第一行一个正整数 T(1≤T≤105),表示有 T 组询问。
接下来 T 行,每行一个正整数 x(1≤x≤106)。
Output
对于每组询问,输出一行一个整数,表示答案。
Sample
输入
9
5
6
7
8
9
10
100
1000
10000
输出
2
4
4
2
2
4
22
163
1132
Solution
- 非负整数 x 与小于自身的非负整数异或得到的结果都不相同
- 非负整数 x 与小于自身的非负整数异或得到的结果必定小于 2x
- 非负整数 x = (1000…000)2 与小于自身的非负整数异或,值域为[1000…000, 1111…111],即[x, x2-1],例:x = 4 = (100)2
- 非负整数 x = (1xxx…xxx)2 与小于(1000…000)2的非负整数异或,[1000…000, 1111…111]是值域的子集,即[x, x2-1]是值域的子集,例:x = 6 = (110)2
- 非负整数 x 与小于自身的非负整数异或,若 x 的二进制数在某位上为1,如(…1…),那么[0001000, 0001111]是值域的子集
通过二进制枚举 x 的每一个位,求出各个值域子集内质数的个数之和。
例子:
x = 6 = (110)2
110 ^ 000 = 110 = 6
110 ^ 001 = 111 = 7
110 ^ 010 = 100 = 4
110 ^ 011 = 101 = 5
110 ^ 100 = 010 = 3
110 ^ 101 = 011 = 2
菜鸡不会严格的证明:(大家有什么其他好的方法也欢迎分享
AC Code
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;const int M = 5000001;
int a[M] = {0};
//判断是否为素数
bool prime(int num) {if (num == 1)return 0;if (num == 2 || num == 3)return 1;if (num % 6 != 1 && num % 6 != 5)return 0;int tmp = sqrt(num);for (int i = 5; i <= tmp; i += 6)if (num % i == 0 || num % (i + 2) == 0)return 0;return 1;
}int main() {// a[i] 表示[1, i]内质数的个数for(int i = 1; i <= M; i++) {a[i] = a[i-1];if(prime(i)) {++ a[i];}}int t;cin >> t;while(t--) {int num = 0;int x;cin >> x;// 二进制枚举int f = 1;while(f <= x) {int ls = f & x;// cout << "f = " << f << " x = " << x;// cout << "ls = " << ls << endl;if(ls > 0) {int rs = (ls << 1);num += a[rs-1] - a[ls-1];}f <<= 1;}cout << num << endl;}return 0;
}
第四届传智杯全国大学生IT技能大赛 初赛B组题解 -- D题相关推荐
- 第四届“传智杯”全国大学生IT技能大赛-Java B组题解
A组原成绩 A-组原成绩 题目描述 花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的计算机组成原理快要出分了.你现在需要计算你 ...
- (附AK代码)第四届“传智杯”全国大学生IT技能大赛(决赛B组)题解
未完全完成,很快会更新. 第四届"传智杯"大赛(决赛B组)题解目录 A:小智的疑惑 1.题目概述 2.解析 3.AC代码 B:三元组 1.题目概述 2.解析 3.AC代码 C:排排 ...
- 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】
感觉都是暴力题或者类似原题,就是手速场. 目录 A. 小智的疑惑 B. 三元组 C. 排排队 D. 背单词的小智 F1. 生活在树上(easy version) A. 小智的疑惑 比赛的时候写的KMP ...
- 第四届“传智杯”全国大学生IT技能大赛(初赛B组)
复习专业课直接把这茬忘记了,补回去. 一开始做了A组的题目,我说怎么总感觉怪怪的. ~~~~~~~~~~ T216906 组原成绩 #include<iostream> #include& ...
- 第四届“传智杯”全国大学生IT技能大赛(初赛B组)题解
基本上都是模拟,除了第四题都很简单 1.T216906 组原成绩 代码 #include<iostream> using namespace std; int main() {int x, ...
- 2022年第五届“传智杯”全国大学生IT技能大赛——程序设计挑战赛
邀您参加第五届"传智杯"全国大学生IT技能大赛 https://m.saikr.com/active/templete/czb/1667799418?spread_code=A73 ...
- 第三届“传智杯”全国大学生IT技能大赛(初赛)-Java B组题解
A - 课程报名 A-课程报名洛谷题目链接 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定价为v元:每报名m个学员,课程的定价就要提升a 元.由于课程能够容纳的学生 ...
- 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解合集
文章目录 A - 课程报名 B - 期末考试成绩 C - 志愿者 D - 终端 E - 运气 总结 A - 课程报名 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定 ...
- 2021年第三届传智杯全国大学生IT技能大赛(决赛B组)
T172096 课程 题目背景 disangan233 喜欢数数,于是他想让你帮他回答一个问题. 题目描述 传智专修学院提供 A,B 两个课程,分别有 n,m个学生报名.报名 A 的学生的编号为 an ...
最新文章
- 疫情之下,武汉女生在家中答辩,获得国外博士学位!
- 11.8. DOMDocument
- 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
- mkisofs简单定制linux iso
- Linux 进程、端口、IP、连接数等查询脚本
- 互联网大鳄的成长模式
- 修改html页面的title,可以自定义
- 把树分成森林 matlab,20170106RF_Matlab 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随 269万源代码下载- www.pudn.com...
- php 不解析,php不解析html代码
- 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
- 【转载】漏洞 CNVD-2017-36682 相关公告以及 JavaScript / 安卓开发者须知
- Qt引用Boost问题
- dede首页如何调用单页文档内容标签
- Vue项目中引用‘阿里巴巴字体图标库iconfont’
- 408操作系统考研笔记!超级详细!23最新考纲
- pip install deepforest 失败
- Jetson 系列——Jetson Nano使用sudo命令免输入密码方法
- 数据挖掘之用户价值分析
- mysql按1-12月查询统计数据
- 在线电影订票系统 - 数据库建模
热门文章
- 【每日早报】2019/10/30
- python http2_python2使用urllib/urllib2实现Http请求
- pyinstaller打包exe可执行文件后运行找不到pandas或者XXX模块
- 【实战类】Hog SVM进行图像分类任务
- 给刚入行Python的福利,一个Python高效薅羊毛工具,请低调使用。
- 食在广州 | 爬取分析广州6万+餐饮门店数据
- C语言复习——ACLLIB实现小游戏
- ubuntu18.04 命令行关机、重启
- 51nod1989 竞赛表格
- Xmas!送你Flutter Animation小星星!