题目描述

给出一个长度为 $n$ 的数列 $a$ ,求 $a_1$ 分别与 $a_1...a_n$ 的次大公约数。不存在则输出-1。

输入

第一行一个正整数 $n$ 。

第二行 $n$ 个用空格隔开的正整数,第 $i$ 个为 $a_i$ 。

$n\le 10^5,a_i\le 10^{12}$

输出

一行 $n$ 个用空格隔开的整数,第 $i$ 个表示 $\text{sgcd}(a_1,a_i)$ 。

样例输入

4
12450 1 2 450

样例输出

6225 -1 1 75


题解

数论

次大公约数显然是最大公约数除以它的最小质因子得到的结果。

但是每次都求最大公约数,然后再找最小质因子的话,时间复杂度为 $O(n\sqrt a)$ ,无法承受。

考虑:每次都是用 $a_1$ 与其它数求次大公约数,而最大公约数的因子一定是两个数的因子。

因此可以直接预处理出 $a_1$ 的所有质因子,然后每次枚举判断是否成立即可。

由于质因子只有 $O(\log a)$ 个,因此时间复杂度为 $O(\sqrt a+n\log a)$

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll a[100010] , v[40];
inline ll gcd(ll a , ll b)
{
ll t;
while(b) t = a , a = b , b = t % b;
return a;
}
int main()
{
int n , m = 0 , i , j;
ll t;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%lld" , &a[i]);
for(i = 2 , t = a[1] ; 1ll * i * i <= t ; i ++ )
{
if(!(t % i))
{
v[++m] = i;
while(!(t % i)) t /= i;
}
}
if(t != 1) v[++m] = t;
for(i = 1 ; i <= n ; i ++ )
{
t = gcd(a[1] , a[i]);
for(j = 1 ; j <= m ; j ++ )
{
if(!(t % v[j]))
{
printf("%lld " , t / v[j]);
break;
}
}
if(j > m) printf("-1 ");
}
return 0;
}

【uoj#48】[UR #3]核聚变反应强度 数论的更多相关文章

  1. [UR #3] 核聚变反应强度

    次大公约数就是gcd再除以其最小质因子(如果有的话).可以发现要求的sgcd 的前身gcd都是a1的约数,所以把a1质因数分解直接做就行了. #include<bits/stdc++.h> ...

  2. 【UOJ#48】【UR #3】核聚变反应强度(质因数分解)

    [UOJ#48][UR #3]核聚变反应强度(质因数分解) 题面 UOJ 题解 答案一定是\(gcd\)除掉\(gcd\)的最小质因子. 而\(gcd\)的最小值因子一定是\(a_1\)的质因子. 所 ...

  3. uoj 48 核聚变反应强度 次小公因数

    [UR #3]核聚变反应强度 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/48 Description 著名核 ...

  4. [UOJ #48]【UR #3】核聚变反应强度

    题目大意:给你一串数$a_i$,求$sgcd(a_1,a_i)$,$sgcd(x,y)$表示$x,y$的次大公约数,若没有,则为$-1$ 题解:即求最大公约数的最大约数,把$a_1$分解质因数,求出最 ...

  5. UOJ 【UR #5】怎样跑得更快

    [UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...

  6. UOJ #22 UR #1 外星人

    LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...

  7. UOJ.52.[UR #4]元旦激光炮(交互 思路)

    题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...

  8. UOJ【UR #12】实验室外的攻防战

    题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...

  9. UOJ 48 次最大公约数

    次最大公约数 = gcd / 其中一个数质因数中最小的. gcd(42,12) = 6;    div(42) = 2*3*7   div(12) = 2^2*3 sgcd(42,12) = 6 / ...

随机推荐

  1. 《Java 程序设计》课堂实践二

    题目 设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter.定义至少三个构造方法,接收并初始化这些数据.覆盖(O ...

  2. 图解Oracle下建立tnsname

    第一步:运行netca: 第二步: 第三步: 第四步: 第五步: 第六步: 如果前面设置都正确,测试的结果将正常(前提是Database的listener要开启).

  3. [agc001E]BBQ Hard[组合数性质+dp]

    Description 传送门 Solution 题目简化后要求的实际上是$\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}C^{A[i]+A[j]}_{A[i]+A[j]+B[i ...

  4. WPF 如何自定义一个弹框

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简述: 手工以原生Grid的方式,自定义了一个仿弹窗效果,优点可以自定义,缺点需要自己实现以及维护整个弹窗的效 ...

  5. L014-第三关课前linux命令及基础知识考试手把手实战解答小节

    又是一周啊,以后保持一周一个微博吧. 这是一个堂解答考试题的课,那么就以题目来展开吧! 1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这 ...

  6. pytest使用笔记(三)——pytest+allure+jenkins配置使用

    按照pytest使用笔记(二)把pytest+allure配置好后,现在在jenkins配置好,先实现手动构建(立个小目标) 一,安装jenkins插件 首页->系统管理->插件管理,从“ ...

  7. [Ubuntu] <uptime>命令

    uptime 命令 就是查看系统启动时间的,前几个大家应该都很熟悉:当前时间.系统启动时间.正在登陆的用户数 最后的三个数字,分别代表过去 1分钟  5分钟  15分钟  的平均负载(Load Ave ...

  8. 《Node.js核心技术教程》学习笔记

    <Node.js核心技术教程>TOC \o "1-3" \h \z \u 1.章模块化编程 2019.2.19 13:30' PAGEREF _101 \h 1 08D ...

  9. java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理

    一.问题描述 项目开发使用的是SSM框架,项目那个正常运行,开发一个新功能后,添加了一些配置文件,再重新运行项目抛出异常,找不到name为init的bean. 二.异常信息详细 六月 30, 2018 ...

  10. Switch Game :因子数

    A - Switch Game Problem Description There are many lamps in a line. All of them are off at first. A ...