您的位置:首页 > 其它

JZOJ.4714【NOIP2016提高A组模拟8.19】公约数

2016-08-22 10:19 155 查看

Problem

Description

给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b。

Input

输入共一行,一个正整数n。

Output

输出共一行,一个正整数表示答案。

Sample Input

3

Sample Output

1

解释:只有(2,3)满足要求

Data Constraint

对于30%的数据满足n<=1000

对于60%的数据满足n<=10^5

对于100%的数据满足n<=10^7

Solution

我们可以知道,对于某一些数对,他们的GCD是相同的,所以我们设a=2n,b=2n+1,只要枚举(ka,kb)(因为gcd(a,b)=1,所以gcd(ka,kb)=k),然后判断一下a^b是否等于k就行了。

当然,还有另外一种更好理解的方法。

我们发现,gcd(a,b)≤a−b,a异或b≥a−b。

所以,如果gcd(a,b)=a^b,那么当且仅当a^b=a-b.

我们枚举b,令a=kb,然后判断a^b是否等于a-b即可。

——2016.8.22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: