GCD XOR UVA - 12716 ——筛法建立约数表+xor运算+数学规律
2017-05-26 12:01
519 查看
Think:
1埃式筛法思想建立约数表
2初始打表寻找运算的数学规律
3xor运算(不带进位的二进制加法)
运算法则
xor运算——百度百科链接
vjudge题目链接
以下为Accepted代码
1埃式筛法思想建立约数表
2初始打表寻找运算的数学规律
3xor运算(不带进位的二进制加法)
运算法则
1. a ⊕ a = 0 2. a ⊕ b = b ⊕ a 3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c; 4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.((a^b) == c <=> a(a^c) == b) 5. a ⊕ b ⊕ a = b. 6.若x是二进制数0101,y是二进制数1011; 则x⊕y=1110 只有在两个比较的位不同时其结果是1,否则结果为0 即“两个输入相同时为0,不同则为1”!
xor运算——百度百科链接
vjudge题目链接
以下为Accepted代码
/* 1打表发现数学规律gcd(a, b) == (a^b) => (a-b) == (a^b) 2筛法思想建立约数表 3xor运算:(a^b) = c <=> (a^c) = b; */ #include <cstdio> #include <cstring> using namespace std; int v[30000004] = {0}; int main(){ int a, b, c; ///筛法思想建立约数表 for(c = 1; c <= 15000000; c++){ for(a = c + c; a <= 30000000; a += c){ b = a - c; if(c == (a^b)) v[a]++; } } ///now:v[a]:(a, xi); for(int i = 2; i <= 30000000; i++){ v[i] += v[i-1]; } ///now:v[a]:(ai, xi); int T, k, n; scanf("%d", &T); for(k = 1; k <= T; k++){ scanf("%d", &n); printf("Case %d: %d\n", k, v ); } return 0; }
相关文章推荐
- uva12716 GCD XOR(打表找规律+筛法)
- UVa 12716 - GCD XOR(筛选+规律)
- UVa12716 - GCD XOR(数论数学构造)
- uva12716 GCD等于XOR 筛法枚举
- UVA 12716 GCD XOR (数论,规律)
- UVa 12716 GCD XOR
- UVa 12716 GCD XOR (简单证明)
- UVA 12716(p318)----GCD XOR
- UVa12716 GCD XOR
- UVa 12716 (GCD == XOR) GCD XOR
- UVA 12716 - GCD XOR
- uva12716GCD等于XOR(预处理)
- UVa12716 - GCD XOR
- UVA 12716 GCD XOR (数论 gcd和异或不等式)
- UVa 12716 (GCD == XOR)
- 数论,优化,预处理(GCD 等于 XOR,uva 12716)
- UVA 12716 GCD XOR
- UVA12716 GCD等于XOR 数论 枚举
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
- uva 12716 - GCD XOR