codeforces#505--B Weakened Common Divisor
B. Weakened Common Divisor
time limit per test
1.5 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
During the research on properties of the greatest common divisor (GCD) of a set of numbers, Ildar, a famous mathematician, introduced a brand new concept of the weakened common divisor (WCD) of a list of pairs of integers.
For a given list of pairs of integers (a1,b1)(a1,b1), (a2,b2)(a2,b2), ..., (an,bn)(an,bn) their WCD is arbitrary integer greater than 11, such that it divides at least one element in each pair. WCD may not exist for some lists.
For example, if the list looks like [(12,15),(25,18),(10,24)][(12,15),(25,18),(10,24)], then their WCD can be equal to 22, 33, 55 or 66 (each of these numbers is strictly greater than 11 and divides at least one number in each pair).
You're currently pursuing your PhD degree under Ildar's mentorship, and that's why this problem was delegated to you. Your task is to calculate WCD efficiently.
Input
The first line contains a single integer nn (1≤n≤1500001≤n≤150000) — the number of pairs.
Each of the next nn lines contains two integer values aiai, bibi (2≤ai,bi≤2⋅1092≤ai,bi≤2⋅109).
Output
Print a single integer — the WCD of the set of pairs.
If there are multiple possible answers, output any; if there is no answer, print −1−1.
Examples
input
Copy
3
17 18
15 24
12 15
output
Copy
6
input
Copy
2
10 16
7 17
output
Copy
-1
input
Copy
5
90 108
45 105
75 40
165 175
33 30
output
Copy
5
Note
In the first example the answer is 66 since it divides 1818 from the first pair, 2424 from the second and 1212 from the third ones. Note that other valid answers will also be accepted.
In the second example there are no integers greater than 11 satisfying the conditions.
In the third example one of the possible answers is 55. Note that, for example, 1515 is also allowed, but it's not necessary to maximize the output.
枚举一下第一对数的因子用set存下
注意用素数筛来做不然会超时
也要注意n=1的情况
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
int n;
const int maxn = 150005;
LL a[maxn], b[maxn];
set<LL> num;
set<LL>::iterator it;
void cal(LL x, LL y)
{
for(LL i = 2; i * i <= x; i++){
if(x % i == 0){
num.insert(i);
}
while(x % i == 0){
x /= i;
}
}
if(x > 1)
num.insert(x);
for(LL i = 2; i * i <= y; i++){
if(y % i == 0){
num.insert(i);
}
while(y % i == 0){
y /= i;
}
}
if(y > 1){
num.insert(y);
}
}
int main()
{
while(scanf("%d", &n) != EOF){
num.clear();
for(int i = 0; i < n; i++){
scanf("%I64d%I64d", &a[i], &b[i]);
}
cal(a[0], b[0]);
if(n == 1){
it = num.begin();
printf("%I64d\n", *it);
}
else{
bool ed = false;
for(it = num.begin(); it != num.end(); it++){
bool flag = true;
LL t = *it;
for(int j = 1; j < n; j++){
if((a[j] % t != 0) && (b[j] % t != 0)){
flag = false;
break;
}
}
if(flag){
printf("%I64d\n", t);
ed = true;
break;
}
}
if(!ed){
printf("-1\n");
}
}
}
return 0;
}
codeforces#505--B Weakened Common Divisor的更多相关文章
- CF #505 B Weakened Common Divisor(数论)题解
题意:给你n组,每组两个数字,要你给出一个数,要求这个是每一组其中一个数的因数(非1),给出任意满足的一个数,不存在则输出-1. 思路1:刚开始乱七八糟暴力了一下果断超时,然后想到了把每组两个数相乘, ...
- CF1025B Weakened Common Divisor 数学
Weakened Common Divisor time limit per test 1.5 seconds memory limit per test 256 megabytes input st ...
- Codeforces #505(div1+div2) B Weakened Common Divisor
题意:给你若干个数对,每个数对中可以选择一个个元素,问是否存在一种选择,使得这些数的GCD大于1? 思路:可以把每个数对的元素乘起来,然后求gcd,这样可以直接把所有元素中可能的GCD求出来,从小到大 ...
- 【Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) B】Weakened Common Divisor
[链接] 我是链接,点我呀:) [题意] 给你n个数对(ai,bi). 让你求一个大于1的数字x 使得对于任意的i x|a[i] 或者 x|b[i] [题解] 求出第一个数对的两个数他们有哪些质因子. ...
- CodeForces - 1025B Weakened Common Divisor
http://codeforces.com/problemset/problem/1025/B 大意:n对数对(ai,bi),求任意一个数满足是所有数对中至少一个数的因子(大于1) 分析: 首先求所有 ...
- codeforces 1025B Weakened Common Divisor(质因数分解)
题意: 给你n对数,求一个数,可以让他整除每一对数的其中一个 思路: 枚举第一对数的质因数,然后暴力 代码: #include<iostream> #include<cstdio&g ...
- CF1025B Weakened Common Divisor【数论/GCD/思维】
#include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include ...
- CF1025B Weakened Common Divisor
思路: 首先选取任意一对数(a, b),分别将a,b进行因子分解得到两个因子集合然后取并集(无需计算所有可能的因子,只需得到不同的质因子即可),之后再暴力一一枚举该集合中的元素是否满足条件. 时间复杂 ...
- CF1025B Weakened Common Divisor 题解
Content 定义 \(n\) 个数对 \((a_1,b_1),(a_2,b_2),(a_3,b_3),...,(a_n,b_n)\) 的 \(\text{WCD}\) 为能够整除每个数对中至少一个 ...
随机推荐
- 【转】MFC 对话框Border属性设置(None、Thin、Resizing、Dialog Frame)
对话框的Border属性对应的值设置 Dialog Frame WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_CLIPSIBLINGS | DS_MODALFRAME ...
- static、extern分析
1.extern extern在变量声明中有这样一个作用:你要在demo2.cpp中引用demo1.cpp中的一个全局变量,就要在demo2.h中用extern来声明这个全局变量(或者在demo1.h ...
- Python脚本完美解决Linux环境解压.zip文件乱码问题
1.vi uzip(文件名)2.复制以下Python程序 #!/usr/bin/env python # -*- coding: utf-8 -*- # uzip.py import os impor ...
- ajax等待(比较慢时)(显示图片)
html页面 <div style="display:none;" id="loading-mask"></div> <div i ...
- EF中修改对象的值的问题。。。(字段超级多的时候)
一般EF中修改单个对象的值,我是这样处理的. 如:DBEntities db=new DBEntities(); student stu = db.student.firstOrdefault(m=& ...
- haproxy+keepalived实现web集群高可用性[转]
负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将“请求”.“访问”的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些 ...
- c++ 转化
atof(将字符串转换成浮点型数)相关函数atoi,atol,strtod,strtol,strtoul表头文件#include定义函数double atof(const char *nptr);函数 ...
- 使用Unity制作的一个望远镜特效,在狙击手游戏中非经常见
仅仅须要编写一个脚本文件,然后就能随意设置放大缩小的速度.以及程度.
- 超全面的JavaWeb笔记day19<Service>
今日内容 l Service事务 l 客户关系管理系统 Service事务 在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础! 1 DAO中的事务 在DAO中处 ...
- Python 高斯坐标转经纬度算法
# 高斯坐标转经纬度算法# B=大地坐标X# C=大地坐标Y# IsSix=6度带或3度带def GetLatLon2(B, C,IsSix): #带号 D = math.trunc(C / 1000 ...