首页 > 试题广场 >

公因数排序

[编程题]公因数排序
  • 热度指数:725 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

一种新的排序方法规定,如果任意两个具有大于的公因数,则它们可以交换位置。想知道对于给定的数列,能否通过该方法将其排为升序?


输入描述:

第一行一个正整数,表示测试数据组数;对于每组测试数据:

第一行一个正整数,表示数列中数字的个数;

第二行个整数,表示数列中的每个数字



输出描述:

对于每组测试数据,如果可以排序成功,输出;如果不能,输出(均不包含引号)。

示例1

输入

1
5
2 6 5 4 7

输出

Yes

说明

4和6具有公因数2,可交换,交换后数列为2 4 5 6 7升序,排序成功。

示例2

输入

1
4
1 3 2 4

输出

No

说明

升序为1 2 3 4,但2和3无公因数,不可交换,因此不能排序成功。


备注:
1 \leq T \leq 10;<br />2 \leq n \leq 10^5;<br />0 \leq a[i] \leq 10^6
头像 丨阿伟丨
发表于 2025-09-16 13:59:38
题目链接 公因数排序 题目描述 一种新的排序方法规定,如果任意两个数 具有大于 1 的公因数(即 ),则它们可以交换位置。 给定一个数列,判断能否通过这种交换方法将其排为升序。 思路分析 这是一个典型的连通性问题,可以用并查集 (Disjoint Set Union, DSU) 来解决。 核心思想 展开全文