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。

 

因为ab的最大公约数为c,所以使a=i*cb=j*c,又因为ab都是c的倍数,我们使b>a,并且ba相邻的c的倍数,就可以得到b=i*c+c,这时我们将c替换为ii替换为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 }

 

posted on 2017-08-11 17:05  Shotray  阅读(527)  评论(0)    收藏  举报