简化题意:构造一个n的排列满足 i+a[i] 不是素数
众所周知偶数都不是素数,可以考虑从这方面下手
假设排列为正序排列,那么每一项都是 2*i ,都是偶数,显然只有 1 不合法因为 2*1 是素数,所以我们可以考虑对后续影响最小的改动方法
考虑将 1 和 3 互换,发现合法,手玩一下可以发现 n 为 1 和 2 的时候都无解
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; int __t = 1, n; void solve() { cin >> n; if (n <= 2) { cout << "-1\n"; return; } cout << "3 2 1 "; for (int i = 4; i <= n; i++) { cout << i << " "; } cout << "\n"; return; } int32_t main() { #ifdef ONLINE_JUDGE ios::sync_with_stdio(false); cin.tie(0); #endif // cin >> __t; while (__t--) solve(); return 0; }