UVa 12716 - GCD XOR(筛法 + 找规律)】的更多相关文章

UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 XOR的性质 GCD 由于题目只给出一个n,我们要求对数,能做的也始终暴力枚举a,b,这样就有n^2的复杂度,由于n很大,根本过不了. 于是我们就想用到其中一些性质,如XOR 与GCD,不妨假设 a xor b = c,并且根据题意还知道, gcd(a,b) = c,也就说明c一定是a的因子,所以在枚举的…
题意:求出[1,n]中满足gcd(a,b)=a xor b,且1<=a<=b<=n的对数 题解:首先a xor b = c,则a xor c = b,而b是a的约数,则可以使用素数筛选法的方法使用O(nlogn)枚举a与c      接着gcd需要O(logn)的时间,时间为O(n(logn)^2) 但是我们还可以继续优化掉一个log,我们打表找规律可以看出c=a-b 证明:因为a - b(相同为0,不同为1或者-1) <=a xor b(相同为0,不同为1),又因为gcd(a,b…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4454 题意: 输入整数n(1≤n≤30000000),有多少对整数(a,b)满足:1≤b≤a≤n,且gcd(a,b)=a xor b.例如n=7时,有4对:(3,2), (5,4), (6,4), (7,6). 分析: 若a xor b = c,则a xor c = b,所以可以枚…
题意: 问整数n以内,有多少对整数a.b满足(1≤b≤a)且gcd(a, b) = xor(a, b) 分析: gcd和xor看起来风马牛不相及的运算,居然有一个比较"神奇"的结论: 设gcd(a, b) = xor(a, b) = c, 则 c = a - b 这里 有比较严格的证明. 有了这个结论后,我们可以枚举约数c,然后枚举c的倍数a,再根据c = a - b计算b,检验b是否满足gcd(a, b) = xor(a, b) #include <cstdio> ; ]…
https://vjudge.net/problem/UVA-12716 求有多少对整数(a,b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b 结论:若gcd(a,b)= a XOR b = c,则c=a-b 证明: 1.任意两个数a,b,若a>=b,则 a-b <= a XOR b 2.若 c为a.b的最大公约数,且a>=b,则 a-b >= c 假设存在 c 使得 a-b > c,则 c<a-b<=a XOR b,即 c&l…
 题意:给你一个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 -…
题意:输入整数n(1<=n<=30000000),有多少对整数(a, b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b. 分析:因为c是a的约数,所以枚举c,a = k*c,通过a-c求b,并通过a^b=c来验证. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<…
参考:http://www.cnblogs.com/naturepengchen/articles/3952145.html #include<stdio.h> #include<string.h> #include<time.h> ; int ans[N]; int gcd(int a,int b){ if(!b) return a; return gcd(b,a%b); } void init(){ ;c<=N/;c++){ for(int a=c+c;a&l…
题意: 问 gcd(i,j) = i ^ j  的对数(j <=i <= N ) N的范围为30000000,有10000组例子 思路:GCD(a,b) = a^b = c GCD(a/c,b/c) = 1 (1) (a-b) <= c (2) (a/c-b/c) <=1 (3) (1)(3) => a/c-b/c = 1=> a-b=c #include <iostream> #include <cstdio> #include <cst…
Problem Description Now given two kinds of coins A and B,which satisfy that GCD(A,B)=1.Here you can assume that there are enough coins for both kinds.Please calculate the maximal value that you cannot pay and the total number that you cannot pay. Inp…