简单的网页设计作品欣赏长沙企业seo优化
问题描述
给定一个长度为 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