题意:
问整数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)
100代码:
#include<cstdio> using namespace std; int n,ans; int main(){ scanf("%d",&n); for(int c=1;c<=n;c++){ for(int a=c*2;a<=n;a+=c){ int b=a-c; if((a^c)==b) ans++; } } printf("%d ",ans); return 0; }