Two Divisors【GCD数论】

2023-11-17

You are given nn integers a1,a2,…,ana1,a2,…,an.

For each aiai find its two divisors d1>1d1>1 and d2>1d2>1 such that gcd(d1+d2,ai)=1gcd(d1+d2,ai)=1 (where gcd(a,b)gcd(a,b) is the greatest common divisor of aa and bb) or say that there is no such pair.

Input

The first line contains single integer nn (1≤n≤5⋅1051≤n≤5⋅105) — the size of the array aa.

The second line contains nn integers a1,a2,…,ana1,a2,…,an (2≤ai≤1072≤ai≤107) — the array aa.

Output

To speed up the output, print two lines with nn integers in each line.

The ii-th integers in the first and second lines should be corresponding divisors d1>1d1>1 and d2>1d2>1 such that gcd(d1+d2,ai)=1gcd(d1+d2,ai)=1 or −1−1 and −1−1 if there is no such pair. If there are multiple answers, print any of them.


有N个值(其实可以看成T组输入),然后求每一个a[i]能否被两个它的除数d1, d2给做到gcd(d1 + d2, a_i) == 1,然后这里用一下公式gcd(x, y) == 1则有gcd(x + y, x * y) == 1。(可以用反证法,假设存在,然后反证。)

  然后我们可以找到第一个质因子为p,然后为了保证gcd(x, y) == 1然后我们把a[i]的所有的p都给d1,然后剩下的就是d2了,只要d2不为1,那么就是有解了。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 5e5 + 5;
vector<int> Prim;
bool vis[10005] = {false};
void init()
{
    for(int i=2; i<=10000; i++)
    {
        if(!vis[i])
        {
            Prim.push_back(i);
            for(int j = 2 * i; j <= 10000; j += i) vis[j] = true;
        }
    }
}
int N, a[maxN];
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
pair<int, int> ans[maxN];
pair<int, int> solve(int x)
{
    pair<int, int> s = make_pair(-1, -1);
    int len = (int)Prim.size();
    for(int i=0; i<len; i++)
    {
        if(x % Prim[i] == 0)
        {
            int d1 = Prim[i];
            x /= Prim[i];
            while(x % Prim[i] == 0)
            {
                x /= Prim[i];
                d1 *= Prim[i];
            }
            if(x == 1) return s;
            s = make_pair(d1, x);
            return s;
        }
    }
    return s;
}
int main()
{
    init();
    scanf("%d", &N);
    for(int i=1; i<=N; i++) scanf("%d", &a[i]);
    for(int i=1; i<=N; i++) ans[i] = solve(a[i]);
    for(int i=1; i<=N; i++) printf("%d%c", ans[i].first, i == N ? '\n' : ' ');
    for(int i=1; i<=N; i++) printf("%d%c", ans[i].second, i == N ? '\n' : ' ');
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Two Divisors【GCD数论】 的相关文章

  • cannot import name ‘gcd’ from ‘fractions’

    cannot import name gcd from fractions 在这里插入图片描述 在3 9
  • 了解GCD

    目录 一 GCD简介 二 GCD好处 三 GCD任务和队列 1 任务 同步执行 xff08 sync xff09 xff1a 异步执行 xff08 async xff09 xff1a 2 队列 串行队列 xff08 Serial Dispa
  • BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】

    题目 Sheng bill有着惊人的心算能力 xff0c 甚至能用大脑计算出两个巨大的数的GCD xff08 最大公约 数 xff09 xff01 因此他经常和别人比 赛计算GCD 有一天Sheng bill很嚣张地找到了你 xff0c 并
  • 求解gcd最大公约数的两种算法

    文章目录 1 更相减损术2 辗转相除法3 两种算法的比较 1 更相减损术 即 xff1a 辗转相减法 是由我国古代 九章算术 提出的一种求解最大公约数 Grand Central Dispatch 的算法 代码示例 xff1a span c
  • 证明:当gcd(a, b) = 1,则gcd(a + b, a) = 1

    假设 xff1a gcd a b 61 1 证明 xff1a gcd a 43 b b 61 1 反证法 xff1a 假设gcd a 43 b b 61 k 61 1 则 xff1a b 61 k r1 a 43 b 61 a 43 k r
  • 最大公约数和最小公倍数的关系

    联系 最大公约数 指两个或多个整数共有的约数中最大的那个 最小公倍数 指两个或多个整数共有的倍数中最小的那个 以两个整数为例 最大公约数表示为 a b 最小公倍数表示为 a b 定理 a b X a b ab a b均为整数 例题 incl
  • 【数论基础】—— 隔板法

    隔板法 问题 n n n 个相同的小球 放到 m m m个不同的盒子里 盒子不能为空的方案数 n
  • GCD->OC

    VHAsyncRun h VHAsyncRun h VHUpload Created by vhall on 2019 11 7 Copyright 2019 vhall All rights reserved typedef void V
  • 基础算法题——奇怪的分式(避免小数运算)

    奇怪的分式 上小学的时候 小明经常自己发明新算法 一次 老师出的题目是 1 4 乘以 8 5 小明居然把分子拼接在一起 分母拼接在一起 答案是 18 45 参见图1 png 老师刚想批评他 转念一想 这个答案凑巧也对啊 真是见鬼 对于分子
  • 数论-欧拉函数

    欧拉函数 在数论 对正整数n 欧拉函数是小于n的正整数中与n互质的数的数目 1 1 此函数以其首名研究者欧拉命名 Euler s totient function 它又称为Euler s totient function 函数 欧拉商数等
  • POJ 2689 Prime Distance(素数区间筛法--经典题)

    大致题意 给定 L R 区间 找出区间内的每个素数 数据范围 1 lt L lt R lt 2 147 483 647 R L lt 1 000 000 R的数值太大 所以不能直接筛 0 R 的 要空间和时间优化 用到区间筛法 另外注意不能
  • AcWing 196. 质数距离 二次筛法

    题 想求231 1范围的质数距离 那么我们可以求5e4范围中的所有质数 然后这些质数可以组成2 231 1中的所有合数 打表求5e4范围中的质数 用类似埃氏筛的方法把l到r的所有质数筛出来 由于差值不会超过 106 可以O n 扫描一遍求距
  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • 因子【Wannafly挑战赛25 A】

    题目链接 思路 遇到N 这样的大数很显然是没办法直接去处理的 题目中告诉我们的已知是 N P k 0与 N P k 1 0 怎么处理N 是一个很复杂的事情 那我们从P开始考虑 尝试着将P拆成几个质因子的乘积形式 例如12可以拆成2 2 3的
  • 牛客 · 奇♂妙拆分

    奇 妙拆分 题目描述 在遥远的米 奇 妙 妙 屋里住着一群自然数 他们没事就喜欢拆 开自己来探 究 现在他们想知道自己最多能被拆分成多少个不同的自然数 使得这些自然数相乘的值等于被拆分的数 输入描述 第 1 1 1行输入一个整数 T
  • 质因数分解(唯一分解定理)

    质因数分解 题目描述 多数据 给出t个数 求出它的质因子个数 数据没坑 难度降低 输入描述 Input Description 第一行 t 之后t行 数据 输出描述 t行 分解后结果 质因子个数 样例输入 2 11 6 样例输出 1 2 数
  • 唯一分解定理(分解质因子)

    唯一分解定理 每个大于一的自然数均可写为质数的积 而且这些素因子按大小排列之后 写法只有一种方式 最简单的写法 include
  • 扩展欧几里得算法详解

    为了介绍扩展欧几里得 我们先介绍一下贝祖定理 即如果a b是整数 那么一定存在整数x y使得ax by gcd a b 换句话说 如果ax by m有解 那么m一定是gcd a b 的若干倍 可以来判断一个这样的式子有没有解 有一个直接的应
  • 2019年第十届蓝桥杯国赛B组试题G-排列数-next_permutation枚举,模拟

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中

随机推荐

  • Linux教程:在虚拟机中如何配置Linux系统网络环境 ?

    对于很多初学Linux 的同学 大多选择使用虚拟机来展开学习 可以方便的做实验 修改 测试 不必害怕出问题 可以随便折腾 大不了换一个虚拟机 原来的系统不受任何影响 但由于不是实体pc机 使用难免受限 如果配置不好 后期开发必受其累 比如
  • C++Primer(4-8章)

    第四章 表达式 求值顺序 C 中没有明确规定大多数运算符的求值顺序 因此我们要避免 改变了某个运算对象的值 又在表达式其他地方使用这个运算对象 这种情况出现 赋值运算满足右结合律 在输出表达式中使用条件运算符 条件运算符的优先级非常低 因此
  • java修改AD域用户密码使用SSL连接方式

    正常情况下 JAVA修改AD域用户属性 只能修改一些普通属性 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改 SSL连接的方式需要操作以下步骤 1 安装AD域证书服务 2 证书颁发机构中设置以
  • 【C语言】结构体中的函数指针

    目录 一 函数指针是什么 二 结构体中的函数指针 一 函数指针是什么 函数指针是指向函数的指针变量 通常我们说的指针变量是指向一个整型 字符型或数组等变量 而函数指针是指向函数 函数指针可以像一般函数一样 用于调用函数 传递参数 正确形式
  • 2.【Python】分类算法—Logistic Regression

    2 Python 分类算法 Logistic Regression 文章目录 2 Python 分类算法 Logistic Regression 前言 一 Logistic Regression模型 1 线性可分和线性不可分 2 Logis
  • 二.全局定位--开源定位框架livox-relocalization实录数据集测试

    相关博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 基于固态雷达的全局
  • 【Flink系列】- RocksDB增量模式checkpoint大小持续增长的问题及解决

    背景 Flink版本 1 13 5 一个使用FlinkSQL开发的生产线上任务 使用Tumble Window做聚和统计 并且配置table exec state ttl为7200000 设置checkpoint周期为5分钟 使用rocks
  • cr2格式缩略图不显示_苹果HEIC格式照片如何快速在windows电脑上查看

    相信很多人一定遇到这样的一个情况 出去旅游玩了一阵 辛辛苦苦回来将iphone拍的照片拷贝到windows电脑 windows7系统 上 想寻找一些心仪的照片 却发现是如下的样子 OMG 欺负我买不起苹果电脑是吧 我拍的是啥 什么也看不到
  • Linux —— XShell6远程操控开机、重启和用户登录注销

    1 关机 重启命令 shutdown h now 表示立即关机 shutdown h 1 表示一分钟后关机 shutdown r now 表示立即重启 halt 直接使用 等价于关机 reboot 就是重启系统 sync 把内存的数据同步到
  • 会议OA项目----我的审批

    前言 上一篇博客我将我的会议的送审和会议排座这两个功能完成 送审之后就到了审批阶段 那么这次做的就是 我的审批 一 实现思路 根据产品原型图 见产品原型图 我的审批界面与我的会议界面大同小异 那么我们可以调用之前的写好的SQL语句 只不过将
  • 文件上传/下载接口(超简单的教程来了)

    前言 文件上传 下载接口与普通接口类似 但是有细微的区别 如果需要发送文件到服务器 例如 上传文档 图片 视频等 就需要发送二进制数据 上传文件一般使用的都是 Content Type multipart form data 数据类型 可以
  • java懒加载注解_一分钟学习Spring注解之懒加载@Lazy

    先声明 本篇文章非常简单属于一分钟学会使用系列 不深入讲解原理 如果要学习源码 可以看小编Spring源码解析系列 什么是懒加载 懒加载就是不使用不加载 使用的时候才去加载 Spring默认不是懒加载 而是启动加载 就在Spring上下文启
  • rac集群节点级联重启故障分析

    author skate time 2012 07 16 无意中发现以前处理故障写的一篇文章 记录下来以备查找 rac集群节点级联重启故障分析 环境 os linux db rac10g ocfs2 rac数据库环境实际包含两个集群 一个是
  • linux socket非阻塞之connect 函数

    1 connect原型 include
  • 联想E480安装MacOS苹果系统记录

    联想E480安装MacOS记录 联想E480安装黑苹果 自己有用IPad和Iphone 但Mac OS却没怎接触过 于是萌生了转用Mac OS的想法 用自用的联想E480装个黑果 为了方便软件上的互补 双系统优先 网上搜搜转转没发现有E48
  • 代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表

    目录 知识点 链表 结点定义 单链表的初始化 判断一个链表是否为空 单链表的销毁 清空单链表 求链表表长 取单链表中第i个元素 按值查找 插入第i个结点 删除第i个结点 移除列表元素 没有采用虚拟头结点的方法 采用虚拟头结点的方法 设计链表
  • PHPExcel导出各种方法总结

    PHPExcel导出 方法一 https blog csdn net u014236259 article details 60601767 public function ExportExcelOrder data name vendor
  • ARM+Linux中断系统详细分析

    ULK第四章里明确讲到 Linux实现了一种没有优先级的中断模型 并且 Linux中断和异常都支持嵌套 这个我不太理解了 这两种说法都与我以前的理解刚好相反 核对了原书 翻译没有错 Linux中断系统到底是否支持优先级 可否嵌套 中断号又是
  • c# json解析(反序列化)、json规范化

    使用 NETFramework3 5 4 0中提供的System Web Script Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化 很直接 要求当前的工程的TargetFram
  • Two Divisors【GCD数论】

    You are given nn integers a1 a2 ana1 a2 an For each aiai find its two divisors d1 gt 1d1 gt 1 and d2 gt 1d2 gt 1 such th