Given an integer N, find how many pairs (A, B) are there such that: gcd(A, B) = A xor B where 1 ≤ B ≤ A ≤ N.
Here gcd(A, B) means the greatest common divisor of the numbers A and B. And A xor B is the value of the bitwise xor operation on the binary representation of A and B.
Input
The first line of the input contains an integer T (T ≤ 10000) denoting the number of test cases. The following T lines contain an integer N (1 ≤ N ≤ 30000000).
Output
For each test case, print the case number first in the format, ‘Case X:’ (here, X is the serial of the input) followed by a space and then the answer for that case. There is no new-line between cases.
Explanation
Sample 1: For N = 7, there are four valid pairs: (3, 2), (5, 4), (6, 4) and (7, 6).
Sample Input
2
7
20000000
Sample Output
Case 1: 4
Case 2: 34866117

问题链接:UVA12716 LA6657 GCD XOR
问题简述:给定整数n,计算有多少对整数(a,b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b。例如:n=7时,有4对:(3,2),(5,4),(6,4),(7,6)。
问题分析
    数学结论如下:

  1. 若a xor b = c,则 a xor c = b
  2. 设a >= b,则满足a - b <= a xor b
  3. 若 gcd(a,b) = a xor b = c ,其前提为a >= b,由上述(2)得:a - b <= c
  4. 令 a = k1×c,b = k2 × c,(k1 >= k2),所以 a - b = (k1 - k2)× c,所以 a - b >= c
  5. 由上述的(3)和(4)得a - b = c

根据上述结论,枚举打表即可。LA6657(UVALive6657)中WA,不理解。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* UVA12716 LA6657 GCD XOR */#include <bits/stdc++.h>using namespace std;const int N = 30000000;
int ans[N + 1];void init()
{memset(ans, 0, sizeof(ans));int end = N >> 1;for(int c = 1; c <= end; c++)for(int a = c + c; a <= N; a += c) {int b = a - c;if((a ^ b) == c) ans[a]++;}for(int i = 2; i <= N; i++) ans[i] += ans[i - 1];   // 算前缀和
}int main()
{init();int t, n;scanf("%d", &t);for(int k = 1; k <= t; k++) {scanf("%d", &n);printf("Case %d: %d\n", k, ans[n]);}return 0;
}

UVA12716 LA6657 GCD XOR【GCD+位运算+前缀和】相关推荐

  1. 沙之家的塔塔露有事寻求冒险者 (位运算 前缀和 差分

    添加链接描述 首先考虑位运算或的性质 可以发现当x的当前位0时则所有l~r的当前位都为0 所以要判断当前位采用差分 d[35][N] 前缀和后判断是否当前位为1则舍去 否则1<<i遍历30 ...

  2. codeforces1670F Jee, You See?(DP/位运算/前缀和/组合数)

    题目链接:codeforces 1670F 题目思路: 首先,对于 sum,有 s u m = a 1 + a 2 + ⋯ + a n sum = a_1 + a_2 + \cdots + a_n s ...

  3. linux upper函数,使用XOR按位运算在linux中使用toupper和tolower函数

    你很可能,但很难看出这一点. 异或:使用常量输入字节值并不比添加(或减去)常量快.并且它变成切换的好处(即toupper()和tolower()可以是相同的代码)非常小,因为代码量太小. 拆卸时,这两 ...

  4. 【位运算 异或】51nod区间xor

    [位运算 异或]51nod区间xor 题目 思路 O(1)求异或前缀和 证明博客可以看这个 代码 #include<bits/stdc++.h> using namespace std; ...

  5. Xor Sum 2(位运算)

    D - Xor Sum 2 Time limit : 2sec / Memory limit : 1024MB Score : 500 points Problem Statement There i ...

  6. 位运算--异或运算XOR

    c++编程中的基础数学问题 02位运算–异或 今天分享一下在编程当中尤其是在数学部分非常重要的一个部分支–位运算.别看位运算就那么几个简单的运算符号,如果能好好利用就能特定的问题中大放异彩. 这里我们 ...

  7. NYIST前缀和,差分,位运算训练题解

    文章目录 关于学长太善良出了一道朴素差分题. 派小星点星 重生之我在异世界学差分 最大连续子段的异或和 肥波纳妾 杨辉三角(Easy) 取石子(pro plus max 版) 重生之我在异世界遇到差分 ...

  8. [Leedcode][JAVA][第67题][二进制求和][位运算][字符串]

    [问题描述][简单] 给你两个二进制字符串,返回它们的和(用二进制表示).输入为 非空 字符串且只包含数字 1 和 0.示例 1:输入: a = "11", b = "1 ...

  9. 起床困难综合症(0x01位运算)

    起床困难综合症 题意 drd 的防御战线由 n 扇防御门组成. 每扇防御门包括一个运算 op 和一个参数 t,其中运算一定是 OR,XOR,AND 中的一种,参数则一定为非负整数. 如果还未通过防御门 ...

最新文章

  1. 什么?分布式事务现在不是都在用么?你还不会?
  2. SQL查询入门(下篇)
  3. 为什么有些产品不尽完美 但还是有大批用户愿意购买(转)
  4. 吴恩达机器学习(第四章)——多变量线性回归
  5. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  6. 深度学习和目标检测系列教程 7-300:先进的目标检测Faster R-CNN架构
  7. mui的back重写
  8. python接口自动化(八)--发送post请求的接口(详解)
  9. I.MX6 shutdown by software
  10. linux中红帽系统下载地址,Redhat8.3系统下载
  11. POJ 1564 Sum It Up
  12. 静态函数只能调用静态变量
  13. 心不动——王阳明最可怕之处
  14. 计算机文档考试题目及答案,计算机word考试题及答案解析
  15. 润乾参数模板中的参数校验
  16. 客制化键盘编程_最全最细客制化键盘指南!(上)
  17. Markdown KaTex 积分符号
  18. 无线路由器的DNS服务器怎么设置,无线路由器dns服务器怎么设置
  19. (7)点云数据处理学习——单摄像头深度估计
  20. CTU Open Contest 2016 Suspicious Samples(单调队列)

热门文章

  1. 【智能金融】黑科技让银行们“长牙齿”,是该让马云颤抖了!
  2. python unrar问题_python利用unrar实现rar文件解压缩
  3. Vanishing Point Detection 消影点/消失点/灭点检测代码学习整理笔记
  4. 旅行comf HYSBZ - 1050
  5. 基础算法:斐波那契函数学习
  6. 京东微信、手机QQ引领社交化购物趋势
  7. 2022最新阿里P6+Java技术体系图
  8. RFC868--时间协议客户机与服务器的实现
  9. 等比缩放公式_iPhone屏幕适配,等比缩放
  10. mininet和ryu简单实现自定义topo