gcd
input
n
output
[1,n]满足gcd(a,b)=a xor b的数对个数
gcd:gcd作为缩写意义有多种。它通常表示最大公约数(greatest common divisor),简写为gcd,或highest common factor,简写为hcf。
xor:异或,英文为exclusive OR,或缩写成xor。
因为a,b的最大公约数为c,所以使a=i*c,b=j*c,又因为a和b都是c的倍数,我们使b>a,并且b为a相邻的c的倍数,就可以得到b=i*c+c,这时我们将c替换为i,i替换为j,打上题目所给的公式就大功告成了。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 int n,ans=0; 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) 11 for(int j=1;j<n/i;j++) 12 if(((i*j)^(i*j+i))==i) ans++; 13 printf("%d",ans); 14 }
浙公网安备 33010602011771号