用 C++ 找到满足给定条件的第一个 N 个自然数的排列
假设我们有两个整数 N 和 K,并且我们必须找到第一个 N 个自然数的排列 P,使得对于所有 1 <= i <= N,恰好有 K 个元素满足条件 GCD(P[i], i) > 1。因此,当 N = 3 和 K = 1 时,输出将为 2、1、3。并且 gcd(2, 1) = 1,gcd(1, 2) = 1,gcd(3, 3) = 3
方法很简单,我们将保持最后 k 个元素的位置,移动其余元素,这样第 i 个元素将放置在 (i + 1) 位置,并且 (N - K) 位置将保持在位置 1,因为 gcd(x,x+1) = 1。
示例
#include<iostream> using namespace std; void findPermutation(int n, int k) { int permutation[n + 1]; for (int i = 1; i <= n; i++) permutation[i] = i; for (int i = 1; i < n - k; i++) permutation[i + 1] = i; permutation[1] = n - k; for (int i = 1; i <= n; i++) cout << permutation[i] << " "; } int main() { int n = 5, k = 2; cout << "The permutation is: "; findPermutation(n, k); }
输出
The permutation is: 3 1 2 4 5
广告