nssl1249-C【数论】

正题


题目大意


∑ a = 1 n ∑ b = 1 a ( g c d ( a , b ) = = a   x o r   b ) \sum_{a=1}^n\sum_{b=1}^a(gcd(a,b)==a\ xor\ b) a=1nb=1a(gcd(a,b)==a xor b)


解题思路

因为 a = = b a==b a==b时肯定不成立,所以直接计算 a > b a>b a>b
那么 g c d ( a , b ) ⩽ a − b gcd(a,b)\leqslant a-b gcd(a,b)ab a   x o r   b ⩾ a − b a\ xor\ b\geqslant a-b a xor bab
我们设 c = a − b c=a-b c=ab,然后枚举一个 c c c和一个 i i i, a = c ∗ i a=c*i a=ci,因为 g c d ( a , a − c ) = c gcd(a,a-c)=c gcd(a,ac)=c,所以只需要判断 a − c = a   x o r   c a-c=a\ xor\ c ac=a xor c就好了


code

#include
using namespace std;
int n,s;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n/2;i++)
	  for(int j=i*2;j<=n;j+=i)
	    if((i^j)==j-i) s++;
	printf("%d",s);
}

你可能感兴趣的:(数论and数学)