当前位置: 首页 > news >正文

Two Divisors ( Educational Codeforces Round 89 (Rated for Div. 2) )

Two Divisors ( Educational Codeforces Round 89 (Rated for Div. 2) )

You are given n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an.

For each a i a_i ai find its two divisors d 1 > 1 d_1 > 1 d1>1 and d 2 > 1 d_2 > 1 d2>1 such that gcd ⁡ ( d 1 + d 2 , a i ) = 1 \gcd(d_1 + d_2, a_i) = 1 gcd(d1+d2,ai)=1 (where gcd ⁡ ( a , b ) \gcd(a, b) gcd(a,b) is the greatest common divisor of a a a and b b b) or say that there is no such pair.

Input

The first line contains single integer n n n ( 1 ≤ n ≤ 5 ⋅ 1 0 5 1 \le n \le 5 \cdot 10^5 1n5105) — the size of the array a a a.

The second line contains n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an ( 2 ≤ a i ≤ 1 0 7 2 \le a_i \le 10^7 2ai107) — the array a a a.

Output

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

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

Example

Input

10
2 3 4 5 6 7 8 9 10 24

Output

-1 -1 -1 -1 3 -1 -1 -1 2 2 
-1 -1 -1 -1 2 -1 -1 -1 5 3 

Note

Let’s look at a 7 = 8 a_7 = 8 a7=8. It has 3 3 3 divisors greater than 1 1 1: 2 2 2, 4 4 4, 8 8 8. As you can see, the sum of any pair of divisors is divisible by 2 2 2 as well as a 7 a_7 a7.

There are other valid pairs of d 1 d_1 d1 and d 2 d_2 d2 for a 10 = 24 a_{10}=24 a10=24, like ( 3 , 4 ) (3, 4) (3,4) or ( 8 , 3 ) (8, 3) (8,3). You can print any of them.

问题描述

给定一组整数 (a_1, a_2, \dots, a_n)。对于每个整数 (a_i),你需要找到两个大于 1 的约数 (d_1) 和 (d_2),使得:

$$

\gcd(d_1 + d_2, a_i) = 1
$$
如果这样的约数对 (d_1) 和 (d_2) 存在,输出它们。如果不存在,则输出 (-1, -1)。如果有多个解,输出其中任意一个即可。

解题思路

关键观察
  1. 约数与因式分解

    • 我们要找到 (a_i) 的约数。如果我们对 (a_i) 进行因式分解,任何有效的 (d_1) 和 (d_2) 必须满足 (\gcd(d_1 + d_2, a_i) = 1)。
    • 一个简单的观察是,对于每个 (a_i),如果它有多个不同的质因数,我们可以将这些质因数分成两个非空集合来构造 (d_1) 和 (d_2)。
  2. GCD 条件

    • 最重要的条件是 (\gcd(d_1 + d_2, a_i) = 1),这意味着 (a_i) 的任何质因数都不应该同时整除 (d_1 + d_2)。
  3. 通过筛法高效因式分解

    • 由于 (a_i) 的最大值可以达到 (10^7),如果直接对每个 (a_i) 进行因式分解,时间复杂度会非常高。因此,我们可以使用 埃拉托斯特尼筛法 预先计算出每个数的最小质因数(SPF),这使得我们可以在 (O(\log a_i)) 时间内对任意数进行因式分解。
  4. 构造 (d_1) 和 (d_2)

    • 如果 (a_i) 只有一个质因数,那么无法将它拆分成满足条件的两个约数。因此,对于质数的幂次,答案应该是 (-1, -1)。
    • 对于有多个质因数的数,我们可以将质因数分成两个非空集合,计算对应的 (d_1) 和 (d_2)。
算法步骤
  1. 筛法:利用筛法预计算每个数的最小质因数(SPF)。
  2. 因式分解:对每个 (a_i) 使用预计算的最小质因数数组来找到它的质因数。
  3. 检查有效性:如果 (a_i) 有多个不同的质因数,将它们分成两组,计算 (d_1) 和 (d_2),并检查 (\gcd(d_1 + d_2, a_i) = 1) 条件。
  4. 输出结果:对每个数,输出对应的 (d_1) 和 (d_2) 或者 (-1, -1)。

代码实现

#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <bitset>
#include <iomanip>
#define endl '\n'
#define int long long
#define Max(a, b) (((a) > (b)) ? (a) : (b))
#define Min(a, b) (((a) < (b)) ? (a) : (b))
#define BoBoowen ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;const int inf = 1e9 + 7;
const int N = 1e7 + 10;int isPrime[N];
vector<int> prime;void Prime() {for (int i = 2; i < N; ++i) {isPrime[i] = 1;}for (int i = 2; i < N; ++i) {if (isPrime[i]) {prime.push_back(i);}for (auto it : prime) {if (it * i >= N) {break;}isPrime[it * i] = 0;if (i % it == 0) {break;}}}
}void solved() {Prime();int n;cin >> n;vector<int> a(n);vector<int> ans1(n, -1);vector<int> ans2(n, -1);for (int i = 0; i < n; ++i) {cin >> a[i];}for (int i = 0; i < n; ++i) {if (isPrime[a[i]]) {continue;}int x = a[i];for (auto it : prime) {if (it * it > x) {break;}if (x % it == 0) {int y = 1;while (x % it == 0) {x /= it;y *= it;}if (y != a[i] && __gcd(y + x, a[i]) == 1) {ans1[i] = x;ans2[i] = y;break;}break;}}}for (int i = 0; i < n; ++i) {cout << ans1[i] << ' ';}cout << endl;for (int i = 0; i < n; ++i) {cout << ans2[i] << ' ';}
}signed main() {BoBoowen;int T = 1;while (T--) {solved();}
}

代码解析

  1. Prime 函数

    • 使用筛法计算每个数的最小质因数,并将所有质数存储在 prime 数组中。
  2. 主解法函数 solved

    • 首先读取输入数据,然后初始化 ans1ans2 数组来存储每个数的两个约数。
    • 对于每个 (a_i),如果它是质数,则跳过它,因为质数不能拆分成两个约数。
    • 对于合成数,通过使用预计算的最小质因数来获取其质因数。如果它有多个不同的质因数,则尝试将质因数分成两组,计算 (d_1) 和 (d_2),并检查它们的和是否满足 GCD 条件。
  3. 输出结果

    • 输出两个数组 ans1ans2,分别存储每个数的两个约数。

时间复杂度分析

  1. 筛法计算

    • 筛法的时间复杂度是 (O(A \log \log A)),其中 (A = 10^7)。
  2. 因式分解

    • 对于每个数 (a_i),使用预计算的最小质因数数组进行因式分解的时间复杂度是 (O(\log a_i))。
  3. 总时间复杂度

    • 总的时间复杂度为 (O(A \log \log A + n \log A)),其中 (A = 10^7) 且 (n \leq 5 \times 10^5)。

结论

该算法通过筛法高效地计算出每个数的最小质因数,然后利用这些质因数进行因式分解,并检查是否能找到满足条件的两个约数。该方法能够高效地处理题目给定的约束。

相关文章:

Two Divisors ( Educational Codeforces Round 89 (Rated for Div. 2) )

Two Divisors &#xff08; Educational Codeforces Round 89 (Rated for Div. 2) &#xff09; You are given n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1​,a2​,…,an​. For each a i a_i ai​ find its two divisors d 1 > 1 d_1 > 1 d1​…...

亚博microros小车-原生ubuntu支持系列:17 gmapping

前置依赖 先看下亚博官网的介绍 Gmapping简介 gmapping只适用于单帧二维激光点数小于1440的点&#xff0c;如果单帧激光点数大于1440&#xff0c;那么就会出【[mapping-4] process has died】 这样的问题。 Gmapping是基于滤波SLAM框架的常用开源SLAM算法。 Gmapping基于RBp…...

Java面试题2025-并发编程进阶(线程池和并发容器类)

线程池 一、什么是线程池 为什么要使用线程池 在开发中&#xff0c;为了提升效率的操作&#xff0c;我们需要将一些业务采用多线程的方式去执行。 比如有一个比较大的任务&#xff0c;可以将任务分成几块&#xff0c;分别交给几个线程去执行&#xff0c;最终做一个汇总就可…...

Stable Diffusion 3.5 介绍

Stable Diffusion 3.5 是由 Stability AI 推出的最新一代图像生成模型&#xff0c;是 Stable Diffusion 系列的重要升级版本。以下是关于 Stable Diffusion 3.5 的详细信息&#xff1a; 版本概述 Stable Diffusion 3.5 包含三个主要版本&#xff1a; Stable Diffusion 3.5 L…...

云计算部署模式全面解析

目录 引言公有云私有云混合云三种部署模式的对比选择建议未来趋势结语 1. 引言 随着云计算技术的快速发展,企业在选择云部署模式时面临着多种选择。本文将深入探讨云计算的三种主要部署模式:公有云、私有云和混合云,帮助读者全面了解它们的特点、优势及适用场景。 © iv…...

Vue 与 Electron 结合开发桌面应用

1. 引言 1.1 什么是 Electron? Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架。它结合了 Chromium 渲染引擎和 Node.js 运行时,使得开发者可以使用 Web 技术创建原生桌面应用。1.2 为什么选择 Vue.js 和 Electron? Vue.js 是一个渐进式 JavaSc…...

数据库优化:提升性能的关键策略

1. 引言 在后端开发中&#xff0c;数据库的性能直接影响系统的稳定性和响应速度。随着业务增长&#xff0c;数据库查询变慢、负载过高等问题可能会影响用户体验。 本文将介绍数据库优化的关键策略&#xff0c;包括索引优化、查询优化、分库分表、缓存机制等&#xff0c;并结合…...

使用openAI与Deepseek的感受

今天简单介绍下使用OpenAI和DeepSeek的感觉&#xff0c;有些地方可能存在不准确的地方&#xff0c;望指正&#xff1a; 从2023年的秋冬到现在2025年的1月间&#xff0c;OpenAI和DeepSeek我都用它们来帮我&#xff0c;当然更多的是OpenAI&#xff0c;但整体感受如下&#xff1a;…...

pytorch实现长短期记忆网络 (LSTM)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 LSTM 通过 记忆单元&#xff08;cell&#xff09; 和 三个门控机制&#xff08;遗忘门、输入门、输出门&#xff09;来控制信息流&#xff1a; 记忆单元&#xff08;Cell State&#xff09; 负责存储长期信息&…...

【ubuntu】双系统ubuntu下一键切换到Windows

ubuntu下一键切换到Windows 1.4.1 重启脚本1.4.2 快捷方式1.4.3 移动快捷方式到系统目录 按前文所述文档&#xff0c;开机默认启动ubuntu。Windows切换到Ubuntu直接重启就行了&#xff0c;而Ubuntu切换到Windows稍微有点麻烦。可编辑切换重启到Windows的快捷方式。 1.4.1 重启…...

【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状

目录 1. reshape 函数的用法 2. transpose 和 permute 函数的使用 4. squeeze 和 unsqueeze 函数的用法 5. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&am…...

大模型GUI系列论文阅读 DAY4续:《Large Language Model Agent for Fake News Detection》

摘要 在当前的数字时代&#xff0c;在线平台上虚假信息的迅速传播对社会福祉、公众信任和民主进程构成了重大挑战&#xff0c;并影响着关键决策和公众舆论。为应对这些挑战&#xff0c;自动化假新闻检测机制的需求日益增长。 预训练的大型语言模型&#xff08;LLMs&#xff0…...

论文阅读(九):通过概率图模型建立连锁不平衡模型和进行关联研究:最新进展访问之旅

1.论文链接&#xff1a;Modeling Linkage Disequilibrium and Performing Association Studies through Probabilistic Graphical Models: a Visiting Tour of Recent Advances 摘要&#xff1a; 本章对概率图模型&#xff08;PGMs&#xff09;的最新进展进行了深入的回顾&…...

python小知识-typing注解你的程序

python小知识-typing注解你的程序 1. Typing的简介 typing 是 Python 的一个标准库&#xff0c;它提供了类型注解的支持&#xff0c;但并不会强制类型检查。类型注解在 Python 3.5 中引入&#xff0c;并在后续版本中得到了增强和扩展。typing 库允许开发者为变量、函数参数和…...

git基础使用--1--版本控制的基本概念

git基础使用–1–版本控制的基本概念 1.版本控制的需求背景&#xff0c;即为啥需要版本控制 先说啥叫版本&#xff0c;这个就不多说了吧&#xff0c;我们写代码的时候肯定不可能一蹴而就&#xff0c;肯定是今天写一点&#xff0c;明天写一点&#xff0c;对于项目来讲&#xff…...

“新月智能武器系统”CIWS,开启智能武器的新纪元

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章链接&#xff1a;星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 “新月之智”智能战术头盔系统&#xff08;CITHS&#xff09;-CSDN博客 目录 智能武…...

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…...

增删改查(CRUD)操作

文章目录 MySQL系列&#xff1a;1.CRUD简介2.Create(创建)2.1单行数据全列插入2.2 单行数据指定插入2.3 多⾏数据指定列插⼊ 3.Retrieve(读取)3.1 Select查询3.1.1 全列查询3.1.2 指定列查询3.1.3 查询字段为表达式&#xff08;都是临时表不会对原有表数据产生影响&#xff09;…...

Vue.js `Suspense` 和异步组件加载

Vue.js Suspense 和异步组件加载 今天我们来聊聊 Vue 3 中的一个强大特性&#xff1a;<Suspense> 组件&#xff0c;以及它如何帮助我们更优雅地处理异步组件加载。如果你曾在 Vue 项目中处理过异步组件加载&#xff0c;那么这篇文章将为你介绍一种更简洁高效的方式。 什…...

HTB:LinkVortex[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用gobuster对靶机进行路径FUZZ 使用ffuf堆靶机…...

新手入门:用快马平台生成第一个labelimg式图像标注demo

今天想和大家分享一个特别适合计算机视觉新手的小项目——用InsCode(快马)平台快速搭建一个简易版的图像标注工具。这个工具类似labelimg的核心功能&#xff0c;但更轻量级&#xff0c;能帮助理解数据标注的基本流程。 项目背景理解 图像标注是计算机视觉的基础环节&#xff0c…...

Hugging Face Hub下载模型文件:hf_hub_download vs snapshot_download保姆级对比指南

Hugging Face Hub模型下载实战指南&#xff1a;hf_hub_download与snapshot_download深度解析 当你第一次在Python项目中集成Hugging Face模型时&#xff0c;是否曾被这两个看似相似的下载函数困扰过&#xff1f;作为Hugging Face生态中最常用的两个下载工具&#xff0c;hf_hub_…...

拓扑优化避坑指南:SIMP算法在MATLAB里跑不收敛?可能是这5个参数没调对

SIMP算法参数调优实战&#xff1a;解决拓扑优化中的收敛难题 当你第一次在MATLAB中运行SIMP算法时&#xff0c;那种期待与兴奋可能很快就被现实击碎——迭代曲线像过山车一样上下波动&#xff0c;最终结构布满棋盘格&#xff0c;边界模糊不清。这不是算法本身的问题&#xff0c…...

别再只调参了!深入RepVgg设计思想,用CCFF模块优化你的模型特征融合效率

深入解析CCFF模块&#xff1a;用RepVgg思想重构跨尺度特征融合技术 在计算机视觉领域&#xff0c;特征融合一直是提升模型性能的关键环节。传统方法如FPN、PANet虽然有效&#xff0c;但在实时性要求高的场景下往往成为计算瓶颈。今天我们要探讨的CCFF&#xff08;Cross-scale C…...

PCB Layout实战:信号走线绕过ESD/TVS管,为何防护会失效?

1. 信号走线绕过ESD/TVS管的隐患 很多工程师在PCB设计时都听过一个原则&#xff1a;信号走线要先经过ESD/TVS保护器件&#xff0c;再连接到被保护芯片。但在实际项目中&#xff0c;由于空间限制或布线困难&#xff0c;经常会出现信号线先连接到芯片&#xff0c;再绕回保护器件的…...

Verilog中的strength到底有什么用?一个案例带你理解强弱驱动的实际应用

Verilog中的strength到底有什么用&#xff1f;一个案例带你理解强弱驱动的实际应用 在数字电路设计中&#xff0c;Verilog作为硬件描述语言的标杆&#xff0c;其精确建模能力直接影响仿真结果的可靠性。而strength&#xff08;强度&#xff09;这一常被忽视的特性&#xff0c;恰…...

Fira Code技术揭秘:编程字体连字引擎的深度优化与实战应用

Fira Code技术揭秘&#xff1a;编程字体连字引擎的深度优化与实战应用 【免费下载链接】FiraCode Free monospaced font with programming ligatures 项目地址: https://gitcode.com/GitHub_Trending/fi/FiraCode 在当今的代码编辑环境中&#xff0c;开发者每天需要处理…...

解锁Navicat密码:突破加密限制的开源解密工具

解锁Navicat密码&#xff1a;突破加密限制的开源解密工具 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 当数据库连接密码被Navicat加密保存却无法记起&…...

Umi-OCR插件技术深度解析:如何构建高效的文字识别工作流

Umi-OCR插件技术深度解析&#xff1a;如何构建高效的文字识别工作流 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins Umi-OCR插件库为文字识别任务提供了多样化的解决方案&#xff0c;涵盖了从本地CPU加…...

MongoDB开发者必备:Dbeaver旗舰版的地理空间数据操作全攻略

MongoDB开发者必备&#xff1a;Dbeaver旗舰版的地理空间数据操作全攻略 在位置服务(LBS)应用爆发的时代&#xff0c;地理空间数据处理能力已成为开发者核心技能。无论是共享经济中的车辆调度&#xff0c;还是电商平台的附近推荐&#xff0c;精准的地理查询直接影响用户体验。作…...