tags: -分解质因数 , gcd

题目大意

给定\(n\)个数,求\(a_1\)与\(a_i\)次小公约数

分析

易知次小公约数是\(\gcd\)的因数,于是用\(\gcd\)除去它的最小质因子即可。

没有次小公约数的情况是\(\gcd = 1\),特判一下即可

直接枚举的时间复杂度为\(O(n \sqrt a)\)

由于数据规模较大考虑优化

由于是求\(sgcd(a_1,a_i)\)于是结果一定是\(a_1\)的质因数组成,于是预处理\(a_1\)的质因数,然后每次处理时除去最小的即可,\(10^{12}< 2^{38}\)于是可以知道得到质因数的个数小于\(38\)个,于是时间复杂度就变为了\(O(50n)\)啦!

代码

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define LL long long
#define maxn 100010
#define rep(i,a,b) for(int i = a; i <= b ;i++) using namespace std; int n;
LL ys[40]; LL gcd(LL a, LL b) {
while (b ^= a ^= b ^= a %= b);
return a;
} int main(){
scanf("%d",&n); LL l,tmp; int tot = 0;
scanf("%lld", &l);
tmp = l;
for (int i = 2; 1ll * i * i <= l ;i ++)
if (l % i == 0)
{
ys[++tot] = i;
while (l % i == 0) l /= i;
}
if (l != 1) ys[++tot] = l;
l = tmp ;
if (l != 1) printf("%lld ",l / ys[1]);
else printf("-1 "); rep(i,2,n){
LL aa;
scanf("%lld",&aa); LL g = gcd(aa,l);
if (g == 1) printf("-1 ");
else rep (j,1,tot)
if (g % ys[j] == 0 )
{
printf("%lld ",g / ys[j]);
break;
}
} return 0;
}

UR #3 核聚变反应强度( gcd )的更多相关文章

  1. 【uoj#48】[UR #3]核聚变反应强度 数论

    题目描述 给出一个长度为 $n$ 的数列 $a$ ,求 $a_1$ 分别与 $a_1...a_n$ 的次大公约数.不存在则输出-1. 输入 第一行一个正整数 $n$ . 第二行 $n$ 个用空格隔开的 ...

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

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

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

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

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

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

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

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

  6. [UOJ48] 核聚变反应强度

    QUQ 思路 求出a1的所有约数,与a1.ai放入同一数组: 求出gcd(a1,ai): 枚举约数,得出ans; 代码实现 #include<cmath> #include<cstd ...

  7. 【UOJ Round #3】

    枚举/二分 C题太神窝看不懂…… 核聚变反应强度 QwQ很容易发现次小的公约数一定是gcd的一个约数,然后……我就傻逼地去每次算出a[1],a[i]的gcd,然后枚举约数……这复杂度……哦呵呵... ...

  8. $2018/8/15 = Day \ \ 1$杂题整理

    \(\mathcal{Morning}\) \(Task1\)高精度\(\times\)高精度 哦呵呵--真是喜闻乐见啊,我发现这一部分比较有意思于是就打算整理下来233.窝萌现在有一个整数\(A = ...

  9. 洛谷P2508 [HAOI2008]圆上的整点

    题目描述 求一个给定的圆$ (x^2+y^2=r^2) $,在圆周上有多少个点的坐标是整数. 输入格式 \(r\) 输出格式 整点个数 输入输出样例 输入 4 输出 4 说明/提示 \(n\le 20 ...

  10. 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块

    #33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...

随机推荐

  1. 硬件路灯第一期CPU篇

    CPU,central processing unit,也就是中央处理器,如果计算机是一个人的话,CPU就是他的大脑我们近下来会科普CPU的几大参数 1.主频假设CPU是建筑工地的话,主频相当于工人们 ...

  2. boost.python编辑,以及c++api的python封装

    boost.python 编辑与踩坑 踩坑1.编辑的版本使用的vs版本不同的话,使用的命令不同 2.编辑第一条命令b2 toolset=msvc-11.0 --with-python报错:fatal ...

  3. redis 缓存穿透和缓存击穿,缓存雪崩的原因及解决方案

    缓存穿透 缓存穿透是指查询缓存中没有,数据库中也没有的数据 .从系统层面来看,请求像是穿透了缓存,直接访问数据库.这种情况会给系统带来潜在的风险,如果有大量的请求访问系统数据库中不存在的数据,会直接请 ...

  4. Delphi中Stringlist的自定义排序(将函数地址做为参数)

    近日,在编制一个程序过程,因为数据量较小,就使用了stringlist来暂存数据.在使用过程中,遇到了一个问题.Stringlist字符串列表的默认排序方法是按ASCII码的方式进行排序,如3,10, ...

  5. spring@Validated校验用法

    1.controller添加注解 public BaseResponse addOrUpdateUnit(@RequestBody @Validated RiskUnitDto riskUnitDto ...

  6. 学习-Vue2-Vue实例-数据与方法-Object.freeze()

    Object.freeze(),会阻止修改现有的property,意味着响应系统无法再追踪变化 代码示例: <!DOCTYPE html> <html lang="en&q ...

  7. 解决在高分屏电脑上的vmware,linux系统的显示比例不正确的问题

    除了在虚拟机系统内改变显示比例为200%的方法,还有另一种方法: 编辑虚拟机设置--硬件--显示器--指定监视器设置,选择任意监视器的最大分辨率为1920x1080(或者比例保持不变的其他分辨率,例如 ...

  8. es 部署 进程、文件数 配置

    1.  /etc/security/limits.conf elasticsearch soft nofile 65536 elasticsearch hard nofile 65536 elasti ...

  9. 关于centos防火墙的一些问题

    防火墙有两种:firewall iptables. 两个都需要设置

  10. Jquery 如何替换html字符串中标签属性值 ??

    如何利用JQuery 替换HTML字符串中的属性值呢? 如 html 字符串有很多 img标签,现在需要修改 img的src值 var html="<div style="t ...