用 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

更新时间:2019 年 12 月 18 日

179 浏览

开启您的 职业生涯

完成课程即可获得证书

开始学习
广告