AcWing 6093. 不互质子序列
问题描述
给定一个长度为 n
的严格单调递增整数序列 a₁, a₂, ..., aₙ
,请你找出该序列的一个最长子序列,要求该子序列满足任意两个相邻元素不互质。
输出满足条件的最长子序列的长度。
输入格式
- 第一行包含一个整数
n
。 - 第二行包含
n
个整数a₁, a₂, ..., aₙ
,表示严格单调递增的整数序列。
输出格式
输出一个整数,表示满足条件的最长子序列的长度。
数据范围
- 前 6 个测试点满足
1 ≤ n ≤ 10
- 所有测试点满足:
1 ≤ n ≤ 10⁵
1 ≤ aᵢ ≤ 10⁵
aᵢ < aᵢ₊₁
输入样例
5
2 3 5 7 11
输出样例
1
c++代码
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int n, a, ans = 0;
unordered_map<int, int> mp;
vector<int> prime_factorization(int x) {
vector<int> p;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
p.push_back(i);
while(x % i == 0) x /= i;
}
}
if (x > 1) p.push_back(x);
return p;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a);
vector<int> p = prime_factorization(a);
int mid = 0;
for (int x : p) {
int k = (mp.find(x) == mp.end()) ? 0 : mp[x];
mid = max(mid, k + 1);
}
ans = max(ans, mid);
for (int x : p) mp[x] = max(mp[x], mid);
}
printf("%d", ans);
return 0;
}//by wqs