📜  用最大余数求和

📅  最后修改于: 2021-04-29 09:17:12             🧑  作者: Mango

给定一个整数N ,任务是找到整数从1N的排列,使得\sum_{i=1}^{N}P_i\mod i最大。

例子:

方法:众所周知,对Y进行模运算后,数字X的最大值为Y-1 。产生最大mosulus值之和的排列将为{N,1,2,3,…。,N – 1}

评估表达式后P_i\mod i在上述数组上,输出数组将为{0,1,2,3,…。,N – 1} ,这是可以获得的最大值。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Function to find the permutation
vector Findpermutation(int n)
{
    vector a(n + 1);
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
int main()
{
    int n = 8;
  
    vector v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        cout << v[i] << ' ';
  
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
class GFG 
{
  
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
public static void main(String[] args) 
{
    int n = 8;
  
    int []v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        System.out.print(v[i] + " ");
}
} 
  
// This code is contributed by 29AjayKumar


Python3
# Python3 implementation of the approach 
  
# Function to find the permutation 
def Findpermutation(n) :
  
    a = [0] * (n + 1); 
  
    # Put n at the first index 1 
    a[1] = n; 
  
    # Put all the numbers from 
    # 2 to n sequentially 
    for i in range(2, n + 1) :
        a[i] = i - 1; 
  
    return a; 
  
# Driver code 
if __name__ == "__main__" : 
  
    n = 8; 
  
    v = Findpermutation(n); 
  
    # Display the permutation 
    for i in range(1, n + 1) :
        print(v[i], end = ' '); 
  
# This code is contributed by AnkitRai01


C#
// C# implementation of the approach
using System;
  
class GFG 
{
  
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
public static void Main(String[] args) 
{
    int n = 8;
  
    int []v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        Console.Write(v[i] + " ");
}
}
  
// This code is contributed by 29AjayKumar


输出:
8 1 2 3 4 5 6 7

时间复杂度: O(N)