Codeforces Round #201 (Div. 2) C 数论
2016-05-10 11:44
495 查看
Problem:
给你n(n<=100)个正数,每次从中取任意两个数,他们的差值如果在集合中没有就加入集合中,问最后集合中元素个数的奇偶性?
Analyse:
首先考虑只有两个数的情况,发现两个数x,y(x>y),可以观察到连续执行操作,可以生成的数的集合是
{k∗gcd(x,y) | k=1,2,..且 k∗gcd(x,y)<=y}
然后考虑有第三个数Z的情况,因为前面的两个数,极其生成的所有数的最大公约数都是gcd(x, y),
所以加入第三个数之后这个集合的新的最大公约数是gcd(gcd(x,y),Z),然后生成集合是以这个最大公约数的倍数来生成.
……..
归纳到n个数,就是以最大的数为上界,所有n个数的最大公约数来填充的集合,元素个数为:max{xi | 1<=i<=n}gcd{x1,x2,...xn}.
给你n(n<=100)个正数,每次从中取任意两个数,他们的差值如果在集合中没有就加入集合中,问最后集合中元素个数的奇偶性?
Analyse:
首先考虑只有两个数的情况,发现两个数x,y(x>y),可以观察到连续执行操作,可以生成的数的集合是
{k∗gcd(x,y) | k=1,2,..且 k∗gcd(x,y)<=y}
然后考虑有第三个数Z的情况,因为前面的两个数,极其生成的所有数的最大公约数都是gcd(x, y),
所以加入第三个数之后这个集合的新的最大公约数是gcd(gcd(x,y),Z),然后生成集合是以这个最大公约数的倍数来生成.
……..
归纳到n个数,就是以最大的数为上界,所有n个数的最大公约数来填充的集合,元素个数为:max{xi | 1<=i<=n}gcd{x1,x2,...xn}.
/**********************jibancanyang************************** *Author* :jibancanyang *Created Time* : 二 5/10 10:57:35 2016 *File Name* : jy.cpp **Code**: ***********************1599664856@qq.com**********************/ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <ctime> #include <stack> using namespace std; typedef pair<int, int> pii; typedef long long ll; typedef unsigned long long ull; vector<int> vi; #define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x << endl; #define pri(a) printf("%d\n",(a)); #define xx first #define yy second #define sa(n) scanf("%d", &(n)) #define sal(n) scanf("%lld", &(n)) #define sai(n) scanf("%I64d", &(n)) #define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++) const int mod = int(1e9) + 7, INF = 0x3fffffff; const int maxn = 1e5 + 13; int gcd(int a, int b) { if (!b) return a; return gcd(b, a % b); } int main(void) { int n; while (cin >> n) { int x = 0; cin >> x; int g = x; for (int i = 1; i < n; i++) { int y; cin >> y; x = max(y, x); g = gcd(g, y); } if ( (x / g - n) % 2) cout << "Alice" << endl; else cout << "Bob" << endl; } return 0; }
相关文章推荐
- C++泛型笔记
- 无刷新分页 jquery.pagination.js
- ExtJS快速入门指南
- Android学习总结
- 各种HTTP错误消息含义
- 组播及igmp协议详解
- KindEditor得不到textarea值的解决方法
- 线性表-队列
- 条件覆盖,路径覆盖,语句覆盖,分支覆盖解释
- CALayer中的position与anchorPoint
- Bootstrap 栅格系统 理解与总结
- Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083
- pppoe工作原理详解
- 找含单链表的环入口点
- Python Built-in Funcitons
- VideoView的相关方法
- 最美好地祝福我们自己
- Xmppframework could not build module dnssd或者libxml
- ASP.NET常用在线编辑器使用方法总结(二)
- 光流法