题意:给你一个N,让你求有多少组A,B,  满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B。

思路:首先我们能够得出两个结论:

A-B >= A%B >= gcd(A, B)

A xor B >= A-B

所以说A xor B >= A-B >= gcd(A, B),然后就能够推出

A xor B = A - B = gcd(A, B) =>    A xor B = A - B  &&  A - B = gcd(A, B)

设 C = gcd(A, B),那么我们能够枚举C和A。通过A-C求出B,再验证A xor B 是否等于C就可以

这里的枚举是仿照筛素数的方法,对于每个A。我们求出一共同拥有多少C满足条件,记为ans[A],那么最后仅仅须要累加一下就能够。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<ctime>
#define eps 1e-6
#define LL long long
#define pii (pair<int, int>)
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;const int maxn = 30000000 + 10000;
//const int INF = 0x3f3f3f3f;
int n;
int ans[maxn];void init() {for(int c = 1; c <= 30000000; c++) {for(int a = c<<1; a <= 30000000; a += c) {int b = a - c;if((a^b) == a-b) ans[a]++;}}for(int i = 1; i <= 30000000; i++) ans[i] += ans[i-1];
}int main() {//freopen("input.txt", "r", stdin);int T; cin >> T;int kase = 0;init();while(T--) {scanf("%d", &n);printf("Case %d: %d\n", ++kase, ans[n]);}return 0;
}

转载于:https://www.cnblogs.com/jzssuanfa/p/6938072.html

UVA 12716 GCD XOR(数论+枚举+打表)相关推荐

  1. UVa 1583 Digit Generator(枚举+打表)

    原题地址 https://vjudge.net/problem/UVA-1583 定义数字x加上x的各位数字之和得到y,称x是y的生成元.一个数可能存在多个生成元,求给定数字n最小的生成元. 解题思路 ...

  2. UVA12716 LA6657 GCD XOR【GCD+位运算+前缀和】

    Given an integer N, find how many pairs (A, B) are there such that: gcd(A, B) = A xor B where 1 ≤ B ...

  3. 导入表编程-枚举导入表

    导入表编程-枚举导入表 思路: 首先导入表的RVA地址,就在optional Header的DataDirectory的第二个元素中.通过它我们定位到导入表. 导入表类似一个二级索引.一级是一个模块目 ...

  4. 关于一个枚举IE表单的DLL,编译无错,但是得不到想到的结果。

    关于一个枚举IE表单的DLL,编译无错,但是得不到想到的结果. 楼主Gdlian(古德里安)2006-03-20 11:04:55 在 VC/MFC / 基础类 提问 主要代码如下:     代码应该 ...

  5. 使用 C++11 Range For-Loop 枚举注册表、文件夹和 WMI

    使用 C++11 range for-loop 来枚举 Windows 注册表键/值.文件夹中的文件和 Windows Management Instrumentation (WMI) 查询,可以不需 ...

  6. #题目:GCD XOR UVA - 12716

    题目描述 Given an integer N, find how many pairs (A, B) are there such that: gcd(A, B) = A xor B where 1 ...

  7. GCD XOR UVA - 12716 ——筛法建立约数表+xor运算+数学规律

    Think: 1埃式筛法思想建立约数表 2初始打表寻找运算的数学规律 3xor运算(不带进位的二进制加法) 运算法则 1. a ⊕ a = 0 2. a ⊕ b = b ⊕ a 3. a ⊕b ⊕ c ...

  8. uvalive 6657 GCD XOR

    //感觉太长时间没做题 好多基本的能力都丧失了(>_<) 首先大概是这样的,因为gcd(a,b)=c,所以a,b都是c的倍数,所以我们依次枚举a的值为2c 3c 4c......,a xo ...

  9. 【BZOJ2818】Gcd,数论练习之欧拉筛

    传送门 写在前面:比较简单的数论题目了 思路:对i来说,所有与i互质的数和i都乘同一个质数p,那么得到的两个数的gcd一定是p,所以我们就可以利用这个来搞一搞了,对1-n的phi预处理出来(欧拉筛), ...

最新文章

  1. 添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加
  2. Apache Shiro和Spring Security的详细对比
  3. Day12 前端html
  4. opencv-3.3安装记录-ubuntu 14.04
  5. 深度学习核心技术精讲100篇(五十八)- 如何量化医学图像分割中的置信度?
  6. WebSocket客户端连接断开后,服务器端的析构处理
  7. apache hive_通过6个简单的步骤在Windows上运行Apache Hive
  8. 【渝粤题库】广东开放大学 微信平台开发与应用 形成性考核
  9. vue-cli 使用better-scroll
  10. vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
  11. Navicat 创建mysql事件
  12. linux path原理,面试题:Linux中的环境变量PATH
  13. mysql如何保证数据不丢失_23 | MySQL是怎么保证数据不丢的?
  14. 阿里云ubuntu16.04安装ruby
  15. python3-pwntools教程_CTF PWN工具篇1
  16. cdq分治(陈丹琦分治)
  17. HTTP协议(一些报头字段的作用,如cace-control、keep-alive)
  18. android 谷歌支付流程,谷歌支付怎么用 谷歌androidpay无需手机操作流程
  19. AI近义词替换工具.v.1.2
  20. 现代计算机图形学笔记(六)——布林-冯反射模型、图形管线、纹理映射

热门文章

  1. mysql5.7主从全备恢复_Mysql5.7—运维常用备份方式(超全)
  2. Shiro————会话管理
  3. MySql主从同步最小配置
  4. rfc方式的集成 sap_转载: 与SAP集成的接口方式比较:IDOC BAPI RFC 之间的区别
  5. 深入剖析:Super Jumping! Jumping! Jumping! (动规)
  6. vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
  7. java流式api,Java 8 中流式API性能基准测试
  8. java国际规范标准,国际化 - Java Servlet 3.1 规范
  9. Web前端期末大作业--响应式健身会所网页设计(HTML+CSS+JS)实现
  10. java ee 值范围_【转载】JAVAEE之内置对象和属性范围