Problema de teclado de 2 teclas

Dado un entero positivo N y una string S , inicialmente es «A» , la tarea es minimizar el número de operaciones requeridas para formar una string que consta de N números de A realizando una de las siguientes operaciones en cada paso:

  • Copie todos los caracteres presentes en la string S .
  • Agregue todos los caracteres a la string S que se copiaron la última vez.

Ejemplos:

Entrada: N = 3
Salida: 3
Explicación:
A continuación se muestran las operaciones realizadas:
Operación 1: Copia la string inicial S una vez, es decir, «A».
Operación 2: Agregar la string copiada, es decir, «A», a la string S modifica la string S a «AA».
Operación 3: Agregar la string copiada, es decir, «A», a la string S modifica la string S a «AAA».
Por lo tanto, el número mínimo de operaciones requeridas para obtener 3 A es 3.

Entrada: N = 7
Salida: 7

Enfoque: El problema dado se puede resolver con base en las siguientes observaciones: 

  1. Si  N = P 1 *P 2 *P m donde {P 1 , P 2 , …, P m } son los números primos , entonces uno puede realizar los siguientes movimientos:
    1. Primero, copie la string y luego péguela (P 1 – 1) veces.
    2. Del mismo modo, copiando nuevamente la string y pegándola (P 2 – 1) veces.
    3. Realizando M veces con el número primo restante , se obtendrá la string con N números de A.
  2. Por lo tanto, el número total de movimientos mínimos necesarios viene dado por  (P 1 + P 2 + … + P m ) .

Siga los pasos a continuación para resolver el problema:

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum number
// of steps required to form N number
// of A's
int minSteps(int N)
{
    // Stores the count of steps needed
    int ans = 0;
 
    // Traverse over the range [2, N]
    for (int d = 2; d * d <= N; d++) {
 
        // Iterate while N is divisible
        // by d
        while (N % d == 0) {
 
            // Increment the value of
            // ans by d
            ans += d;
 
            // Divide N by d
            N /= d;
        }
    }
 
    // If N is not 1
    if (N != 1) {
        ans += N;
    }
 
    // Return the ans
    return ans;
}
 
// Driver Code
int main()
{
    int N = 3;
    cout << minSteps(N);
 
    return 0;
}

Java

// Java Program for the above approach
import java.io.*;
 
class GFG
{
   
    // Function to find the minimum number
    // of steps required to form N number
    // of A's
    static int minSteps(int N)
    {
        // Stores the count of steps needed
        int ans = 0;
 
        // Traverse over the range [2, N]
        for (int d = 2; d * d <= N; d++) {
 
            // Iterate while N is divisible
            // by d
            while (N % d == 0) {
 
                // Increment the value of
                // ans by d
                ans += d;
 
                // Divide N by d
                N /= d;
            }
        }
 
        // If N is not 1
        if (N != 1) {
            ans += N;
        }
 
        // Return the ans
        return ans;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 3;
        minSteps(N);
        System.out.println(minSteps(N));
    }
}
 
// This code is contributed by lokesh potta.

Python3

# Python3 program for the above approach
# Function to find the minimum number
# of steps required to form N number
# of A's
def minSteps( N):
 
    # Stores the count of steps needed
    ans = 0
 
    # Traverse over the range [2, N]
    d = 2
    while(d * d <= N):
 
        # Iterate while N is divisible
        # by d
        while (N % d == 0):
 
            # Increment the value of
            # ans by d
            ans += d
 
            # Divide N by d
            N /= d
        d += 1
     
    # If N is not 1
    if (N != 1):
        ans += N
     
    # Return the ans
    return ans
 
# Driver Code
N = 3
print(minSteps(N))
 
# This code is contributed by shivanisinghss2110   

C#

// C# program for the above approach
using System;
 
class GFG{
     
// Function to find the minimum number
// of steps required to form N number
// of A's
static int minSteps(int N)
{
    // Stores the count of steps needed
    int ans = 0;
 
    // Traverse over the range [2, N]
    for (int d = 2; d * d <= N; d++) {
 
        // Iterate while N is divisible
        // by d
        while (N % d == 0) {
 
            // Increment the value of
            // ans by d
            ans += d;
 
            // Divide N by d
            N /= d;
        }
    }
 
    // If N is not 1
    if (N != 1) {
        ans += N;
    }
 
    // Return the ans
    return ans;
}
 
// Driver Code
static public void Main ()
{
     
    int N = 3;
    Console.Write(minSteps(N));
}
}
 
// This code is contributed by sanjoy_62.

Javascript

<script>
 
// JavaScript Program for the above approach
// Function to find the minimum number
    // of steps required to form N number
    // of A's
    function minSteps(N)
    {
        // Stores the count of steps needed
        var ans = 0;
 
        // Traverse over the range [2, N]
        for (var d = 2; d * d <= N; d++) {
 
            // Iterate while N is divisible
            // by d
            while (N % d == 0) {
 
                // Increment the value of
                // ans by d
                ans += d;
 
                // Divide N by d
                N /= d;
            }
        }
 
        // If N is not 1
        if (N != 1) {
            ans += N;
        }
 
        // Return the ans
        return ans;
    }
 
    // Driver Code
        var N = 3;
        minSteps(N);
        document.write(minSteps(N));
   
// This code is contributed by shivanisinghss2110
 
</script>
Producción

3

Complejidad de Tiempo: O(√N)
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por udaykrishnap2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *