题目:小卡与质数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
  1. 非负整数 x 与小于自身的非负整数异或得到的结果都不相同
  2. 非负整数 x 与小于自身的非负整数异或得到的结果必定小于 2x
  3. 非负整数 x = (1000…000)2 与小于自身的非负整数异或,值域为[1000…000, 1111…111],即[x, x2-1],例:x = 4 = (100)2
  4. 非负整数 x = (1xxx…xxx)2 与小于(1000…000)2的非负整数异或,[1000…000, 1111…111]是值域的子集,即[x, x2-1]是值域的子集,例:x = 6 = (110)2
  5. 非负整数 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题相关推荐

  1. 第四届“传智杯”全国大学生IT技能大赛-Java B组题解

    A组原成绩 A-组原成绩 题目描述 花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的计算机组成原理快要出分了.你现在需要计算你 ...

  2. (附AK代码)第四届“传智杯”全国大学生IT技能大赛(决赛B组)题解

    未完全完成,很快会更新. 第四届"传智杯"大赛(决赛B组)题解目录 A:小智的疑惑 1.题目概述 2.解析 3.AC代码 B:三元组 1.题目概述 2.解析 3.AC代码 C:排排 ...

  3. 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】

    感觉都是暴力题或者类似原题,就是手速场. 目录 A. 小智的疑惑 B. 三元组 C. 排排队 D. 背单词的小智 F1. 生活在树上(easy version) A. 小智的疑惑 比赛的时候写的KMP ...

  4. 第四届“传智杯”全国大学生IT技能大赛(初赛B组)

    复习专业课直接把这茬忘记了,补回去. 一开始做了A组的题目,我说怎么总感觉怪怪的. ~~~~~~~~~~ T216906 组原成绩 #include<iostream> #include& ...

  5. 第四届“传智杯”全国大学生IT技能大赛(初赛B组)题解

    基本上都是模拟,除了第四题都很简单 1.T216906 组原成绩 代码 #include<iostream> using namespace std; int main() {int x, ...

  6. 2022年第五届“传智杯”全国大学生IT技能大赛——程序设计挑战赛

    邀您参加第五届"传智杯"全国大学生IT技能大赛 https://m.saikr.com/active/templete/czb/1667799418?spread_code=A73 ...

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

    A - 课程报名 A-课程报名洛谷题目链接 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定价为v元:每报名m个学员,课程的定价就要提升a 元.由于课程能够容纳的学生 ...

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

    文章目录 A - 课程报名 B - 期末考试成绩 C - 志愿者 D - 终端 E - 运气 总结 A - 课程报名 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定 ...

  9. 2021年第三届传智杯全国大学生IT技能大赛(决赛B组)

    T172096 课程 题目背景 disangan233 喜欢数数,于是他想让你帮他回答一个问题. 题目描述 传智专修学院提供 A,B 两个课程,分别有 n,m个学生报名.报名 A 的学生的编号为 an ...

最新文章

  1. 疫情之下,武汉女生在家中答辩,获得国外博士学位!
  2. 11.8. DOMDocument
  3. 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
  4. mkisofs简单定制linux iso
  5. Linux 进程、端口、IP、连接数等查询脚本
  6. 互联网大鳄的成长模式
  7. 修改html页面的title,可以自定义
  8. 把树分成森林 matlab,20170106RF_Matlab 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随 269万源代码下载- www.pudn.com...
  9. php 不解析,php不解析html代码
  10. 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
  11. 【转载】漏洞 CNVD-2017-36682 相关公告以及 JavaScript / 安卓开发者须知
  12. Qt引用Boost问题
  13. dede首页如何调用单页文档内容标签
  14. Vue项目中引用‘阿里巴巴字体图标库iconfont’
  15. 408操作系统考研笔记!超级详细!23最新考纲
  16. pip install deepforest 失败
  17. Jetson 系列——Jetson Nano使用sudo命令免输入密码方法
  18. 数据挖掘之用户价值分析
  19. mysql按1-12月查询统计数据
  20. 在线电影订票系统 - 数据库建模

热门文章

  1. 【每日早报】2019/10/30
  2. python http2_python2使用urllib/urllib2实现Http请求
  3. pyinstaller打包exe可执行文件后运行找不到pandas或者XXX模块
  4. 【实战类】Hog SVM进行图像分类任务
  5. 给刚入行Python的福利,一个Python高效薅羊毛工具,请低调使用。
  6. 食在广州 | 爬取分析广州6万+餐饮门店数据
  7. C语言复习——ACLLIB实现小游戏
  8. ubuntu18.04 命令行关机、重启
  9. 51nod1989 竞赛表格
  10. Xmas!送你Flutter Animation小星星!