UVa 12716 (GCD == XOR)
来源:互联网 发布:定时语音播报软件 编辑:程序博客网 时间:2024/06/06 02:34
- 题意:
- 给定N,求二元组(A,B)的个数,满足:
1<=A<=B<=NAxorB==gcd(A,B)
规模:
1≤N≤30000000 T≤10000
类型:
- 数论,gcd
分析:
- 这里有一个规律:
- 如果AxorB==gcd(A,B),则A-B==gcd(A,B)
证明:
- 1式:
AxorB>=A−B - 这里考虑将AB对应位数字不同的位置,交换使得,1在A里,0在B里,
- 这样变化后异或值不变,但A-B增大。极限情况下
AxorB==A−B
- 2式:
gcd(A,B)<=A−B ( 这个易证 ) - 而我们有
AxorB==gcd(A,B) ,由12两式AxorB==(A−B)==gcd(A,B)
- 1式:
接下来,枚举gcd(A,B)(设为C)的值,A是C的倍数,看B是否符合
- B==AxorC ==A-C
- 代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<algorithm>#include<iostream>using namespace std;const int INF=0x3fff3fff;const int MAXN=3e7+10;const int MAXM=40010;const int MOD=10001;typedef long long ll;long long n,m;//long long x[2100];int aa[MAXN];int ans[MAXN];int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0); int T,n,a,b,c; memset(ans,0,sizeof(ans)); memset(aa,0,sizeof(ans)); for(int i=1;i<MAXN;i++){ // cout<<i<<endl; for(int j=2;j*i<MAXN;j++){ c=i;a=i*j; b=c^a;//b=a-c if(b==a-c){aa[a]++;} } } for(int i=2;i<MAXN;i++){ ans[i]=ans[i-1]+aa[i]; //cout<<aa[i]<<","; } cin>>T; int kase=0; while(T--){ cin>>n; printf("Case %d: %d\n", ++kase, ans[n]); } return 0;}
阅读全文
0 0
- UVa 12716 (GCD == XOR)
- UVA 12716 - GCD XOR
- uva 12716 - GCD XOR
- 【UVA】12716-GCD XOR
- UVA-12716 - GCD XOR
- UVA 12716 GCD XOR
- UVa 12716 - GCD XOR
- UVA 12716 GCD XOR
- UVA 12716 GCD XOR
- Uva 12716 GCD XOR
- uva 12716 GCD XOR
- UVa 12716 GCD XOR
- UVa 12716 GCD XOR
- uva 12716 GCD XOR
- UVA 12716 GCD XOR(猜想)
- UVa--12716 GCD XOR(math)
- UVA 12716(p318)----GCD XOR
- UVa 12716 GCD XOR (简单证明)
- SpringMVC的返回值
- android 开发菜鸟开篇布局
- selinux
- quartz定时任务使用MYSQL数据库,报SCHED_TIME没有默认值
- jquery选择器是什么?
- UVa 12716 (GCD == XOR)
- 深入理解JVM总结——虚拟机字节码执行引擎
- Org-mode技巧之Latex导出
- 线程同步
- jQuery 效果999动画 延迟
- 中国剩余定理证明及模版
- android语音播报
- Nginx快速入门到使用
- python爬虫之BeautifulSoup的用法