最大公约数的遍历

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;

#define maa ((int)1e5)
vector<int> fac[maa + 5];

void ini() {
	for (int i = 2; i <= maa; i++) {
		if (fac[i].empty()) {
			for (int j = i; j <= maa; j += i) {
				fac[j].push_back(i);
			}
		}
	}
}

int root[maa*10];

int find(int x) {
	if (root[x] == x) return x;
	return root[x] = find(root[x]);
}

bool fun(vector<int> nums) {
	ini();
	int n = nums.size();
	int mx = 0;  // 记录最大值
	for (int x : nums) {
		mx = max(mx, x);
	}
	for (int i = 0; i <= n + mx; i++) root[i] = i;
	for (int i = 0; i < n; i++) {
		for (int p : fac[nums[i]]) {
			int x = find(i), y = find(p + n);
			if (x == y) continue;
			root[x] = y;
		}
	}
	unordered_set<int> st;
	for (int i = 0; i < n; i++) {
		st.insert(find(i));  // 这个要注意,要再次调用find
	}
	return st.size() == 1;
}

int main() {
	vector<int> a = { 4,3,12,8 };
	cout << fun(a);
	return 0;
}

相关推荐

  1. Leetcode.2709 公约数

    2024-06-08 09:36:05       34 阅读
  2. 找出两个数公倍数公约数

    2024-06-08 09:36:05       32 阅读
  3. C语言 求两个整数公约数公倍数

    2024-06-08 09:36:05       22 阅读
  4. 优雅公约数函数

    2024-06-08 09:36:05       34 阅读
  5. 25.公因数 公倍数

    2024-06-08 09:36:05       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 09:36:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 09:36:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 09:36:05       87 阅读
  4. Python语言-面向对象

    2024-06-08 09:36:05       96 阅读

热门阅读

  1. 数据结构:顺序串

    2024-06-08 09:36:05       32 阅读
  2. 994. 腐烂的橘子

    2024-06-08 09:36:05       31 阅读
  3. Flutter核心原理

    2024-06-08 09:36:05       23 阅读
  4. 你知道 npmrc 文档吗? ---- npmrc 关键作用介绍

    2024-06-08 09:36:05       30 阅读
  5. QVariant用法介绍

    2024-06-08 09:36:05       31 阅读
  6. DevOps的原理及应用详解(四)

    2024-06-08 09:36:05       27 阅读
  7. istack智能堆叠

    2024-06-08 09:36:05       29 阅读
  8. 详解 Flink 流处理 API

    2024-06-08 09:36:05       30 阅读