jzoj 4714. 【NOIP2016提高A组模拟8.19】公约数 数(luan)学(gao)

来源:互联网 发布:linux命令大全 编辑:程序博客网 时间:2024/06/04 19:26

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

分析:因为a=b时肯定无解,我们不妨设a>b。设c=a-b。那么有gcd(a,b)<=c,a xor b>=c,所以可得a xor b=c

那么我们枚举c,再枚举a=c*i,若满足a xor c=a-c那么ans+1


代码:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;int main(){int n;scanf("%d",&n);int ans=0;for (int i=1;i<=n;i++)for (int j=2;j<=n/i;j++){int a=i*j;if ((i^a)==a-i) ans++;}printf("%d",ans);return 0;}


0 0
原创粉丝点击