【JZOJ 4714】 公约数
2016-08-19 17:16
197 查看
Description
给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b。对于100%的数据满足n<=10^7
Analysis
正解异常简单。对于任意数对(a,b),不妨设a>b。
首先a xor b=c⇒a xor c=b
设a−b=c
gcd(a,b)=gcd(a−b,b)≤a−b
又a xor b≥a−b,这个的证明很简单,二进制拆开看一看就可以发现。
你发现了什么?
gcd(a,b)≤c≤a xor b
又
gcd(a,b)=a xor b=c=a−b
所以我们可以枚举c,因为a是其倍数,所以枚举会快很多。因为gcd(a,a−c)=c,所以只需判断a xor c=a−c=b即可
时间复杂度为O(n/1+n/2+⋯+n/n)=O(nlogn)
Code
225bytes#include<cstdio> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; int main() { int n,ans=0; scanf("%d",&n); fo(i,1,n) for(int j=i+i;j<=n;j+=i) if((i^j)==j-i) ans++; printf("%d",ans); }
相关文章推荐
- JZOJ4714公约数
- 【JZOJ4714】公约数
- JZOJ.4714【NOIP2016提高A组模拟8.19】公约数
- JZOJ 4714 公约数
- JZOJ 4714 【NOIP2016提高A组模拟8.19】公约数
- Jzoj4714 公约数
- 【挖坑记】JZOJ 4714 公约数
- 【jzoj4714】【公约数】【数论】
- [JZOJ 4714]【NOIP2016提高A组模拟8.19】公约数
- JZOJ4714公约数 找规律
- 【JZOJ 4714】公约数
- JZOJ 3648. 【GDOI2014】beyond
- [JZOJ3105]拼图
- JZOJ-senior-3512. 【NOIP2013模拟11.5A组】游戏节目(show)
- [排序][dp][二分]JZOJ 2746 选数排列
- jzoj 3192.【中山市选2013】球
- JZOJsenior5536.【2014东莞市选】游戏
- 作业-jzoj 1986
- JZOJ 1360. 【2011.12.31普及模拟】逃离洞穴(escape)
- JZOJ(中山纪中)2018.01.21【NOIP普及组】模拟赛D组(第一题)