??
题意:给你一个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
#include
#include
#include
#include
#include
#include
#include