卧薪尝胆,厚积薄发。
提高B组模拟 C
Date: Wed Aug 15 15:15:40 CST 2018 In Category: NoCategory

Description:

求 $[1,n]$ 中有多少个无序实数对 $(a,b)$ 满足 $gcd(a,b)=a\ xor\ b$ .
$1\le n \le 10^7$

Solution:

有性质 $gcd(a,b)\le a-b \le a\ xor\ b$ 。左边不等号显然对,右边每位 $2$ 进制似乎也是满足条件的。
那么我们可以枚举 $gcd(a,b)=k$ 和 $a$ ,则 $b=a+k$ ,只要判断这样是否满足条件就可以了。
复杂度 $\begin{align}O(\sum_{i=1}^n \frac n i)=O(n\ln n)\end{align}$ 。

Code:


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
long long ans = 0;
for(int i = 1;i * 2 <= n;++i)
{
for(int p = 1;(p + 1) * i <= n;++p)
{
int a = i * p,b = i * (p + 1);
if((a ^ b) == i)++ans;
}
}
cout << ans << endl;
return 0;
}
In tag: 其他-其他
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡