Progresión Armónica

Una secuencia de números se llama progresión armónica si el recíproco de los términos está en AP . En términos simples, a, b, c, d, e, f están en HP si 1/a, 1/b, 1/c, 1/d, 1/e, 1/f están en AP. Por ejemplo, 1/a, 1/(a+d), 1/(a+2d), etc. están en HP porque a, a + d, a + 2d están en AP. 
 

Hecho sobre la progresión armónica: 
 

  1. Para resolver un problema de Progresión Armónica, se debe hacer la serie AP correspondiente y luego resolver el problema.
  2. Como el n-ésimo término de un AP está dado por an = a + (n-1)d , el n-ésimo término de un HP está dado por 1/ [a + (n-1) d] .
  3. Para dos números, si A, G y H son respectivamente las medias aritmética, geométrica y armónica , entonces 
    • UN ≥ G ≥ H
    • AH = G 2 , es decir, A, G, H están en GP
  4. Si necesitamos encontrar tres números en un HP, entonces deben asumirse como 1/a–d, 1/a, 1/a+d
  5. La mayoría de las preguntas de HP se resuelven convirtiéndolas primero en AP

Fórmula de Progresión Armónica: 
 

¿Cómo comprobamos si una serie es progresión armónica o no?  
La idea es recíproca la array o serie dada. Después del recíproco, verifica si las diferencias entre elementos consecutivos son iguales o no. Si todas las diferencias son iguales, la progresión aritmética es posible. Entonces, como sabemos, si el recíproco de los términos está en AP, dada una secuencia de series, está en HP. Tomemos una serie 1/5, 1/10, 1/15, 1/20, 1/25 y verifiquemos si es una progresión armónica o no. A continuación se muestra la implementación: 
 

C++

// CPP program to check if a given 
// array can form harmonic progression
#include<bits/stdc++.h>
using namespace std;
 
bool checkIsHP(vector<double> &arr)
{
    int n = arr.size();
 
    if (n == 1)
    {
        return true;
    }
 
    // Find reciprocal of arr[] 
    vector<int> rec;
    for (int i = 0; i < n; i++)
    {
        rec.push_back((1 / arr[i]));
    }
 
    // return (rec); 
 
    // After finding reciprocal, check if 
    // the reciprocal is in A. P. 
    // To check for A.P., first Sort the 
    // reciprocal array, then check difference 
    // between consecutive elements 
    sort(rec.begin(), rec.end());
    int d = (rec[1]) - (rec[0]);
    for (int i = 2; i < n; i++)
    {
        if (rec[i] - rec[i - 1] != d)
        {
            return false;
        }
    }
 
    return true;
}
 
// Driver Code
int main()
{
    // series to check whether it is in H.P 
    vector<double> arr = {1 / 5, 1 / 10, 1 / 15, 1 / 20, 1 / 25};
 
    // Checking a series is in H.P or not 
    if (checkIsHP(arr))
    {
        cout << "Yes" << std::endl;
    }
    else
    {
        cout << "No" <<endl;
    }
    return 0;
}
 
// This code is contributed by mits

Java

// Java program to check if a given
// array can form harmonic progression
import java.util.*;
 
class GFG
{
static boolean checkIsHP(double []arr)
{
    int n = arr.length;
     
    if (n == 1)
        return true;
 
    // Find reciprocal of arr[]
    ArrayList<Integer> rec = new ArrayList<Integer>();
    for (int i = 0; i < n; i++)
        rec.add((int)(1 / arr[i]));
     
    // return (rec);
 
    // After finding reciprocal, check if
    // the reciprocal is in A. P.
    // To check for A.P., first Sort the
    // reciprocal array, then check difference
    // between consecutive elements
    Collections.sort(rec);
    int d = (int)rec.get(1) - (int)rec.get(0);
    for (int i = 2; i < n; i++)
        if (rec.get(i) - rec.get(i - 1) != d)
            return false;
 
    return true;
}
 
// Driver code
public static void main(String[] args)
{
    // series to check whether it is in H.P
    double arr[] = { 1/5, 1/10, 1/15,
                          1/20, 1/25 };
     
    // Checking a series is in H.P or not
    if (checkIsHP(arr))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
// This code is contributed by mits

Python3

# Python3 program to check if a given
# array can form harmonic progression
 
def checkIsHP(arr):
 
    n = len(arr)
     
    if (n == 1):
        return True
 
    # Find reciprocal of arr[]
    rec = []
    for i in range(0, len(arr)):
        a = 1 / arr[i]
        rec.append(a)
    return(rec)
 
    # After finding reciprocal, check if the
    # reciprocal is in A. P.
    # To check for A.P., first Sort the
    # reciprocal array, then check difference
    # between consecutive elements
    rec.sort()
    d = rec[1] - rec[0]
    for i in range(2, n):
        if (rec[i] - rec[i-1] != d):
            return False
 
    return True
 
# Driver code
if __name__=='__main__':
     
    # series to check whether it is in H.P
    arr = [ 1/5, 1/10, 1/15, 1/20, 1/25 ]   
     
    # Checking a series is in H.P or not
    if (checkIsHP(arr)):
        print("Yes")
    else:
        print("No")

C#

// C# program to check if a given
// array can form harmonic progression
using System;
using System.Collections;
class GFG
{
static bool checkIsHP(double[] arr)
{
    int n = arr.Length;
     
    if (n == 1)
        return true;
 
    // Find reciprocal of arr[]
    ArrayList rec = new ArrayList();
    for (int i = 0; i < n; i++)
        rec.Add((int)(1 / arr[i]));
     
    // return (rec);
 
    // After finding reciprocal, check if
    // the reciprocal is in A. P.
    // To check for A.P., first Sort the
    // reciprocal array, then check difference
    // between consecutive elements
    rec.Sort();
    int d = (int)rec[1] - (int)rec[0];
    for (int i = 2; i < n; i++)
        if ((int)rec[i] - (int)rec[i - 1] != d)
            return false;
 
    return true;
}
 
// Driver code
public static void Main()
{
    // series to check whether it is in H.P
    double[] arr = { 1/5, 1/10, 1/15,
                        1/20, 1/25 };
     
    // Checking a series is in H.P or not
    if (checkIsHP(arr))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by mits

PHP

<?php
// PHP program to check if a given
// array can form harmonic progression
 
function checkIsHP($arr)
{
    $n = count($arr);
     
    if ($n == 1)
        return true;
 
    // Find reciprocal of arr[]
    $rec = array();
    for ($i=0;$i<count($arr);$i++)
    {
        $a = 1 / $arr[$i];
        array_push($rec,$a);
    }
    return ($rec);
 
    // After finding reciprocal, check if the
    // reciprocal is in A. P.
    // To check for A.P., first Sort the
    // reciprocal array, then check difference
    // between consecutive elements
    sort($rec);
    $d = $rec[1] - $rec[0];
    for ($i=2;$i<$n;$i++)
        if ($rec[$i] - $rec[$i-1] != $d)
            return false;
 
    return true;
}
 
// Driver code
     
    // series to check whether it is in H.P
    $arr = array( 1/5, 1/10, 1/15, 1/20, 1/25 );    
     
    // Checking a series is in H.P or not
    if (checkIsHP($arr))
        print("Yes");
    else
        print("No");
 
// This code is contributed by mits
?>

Javascript

<script>
 
// JavaScript program to check if a given 
// array can form harmonic progression
 
function checkIsHP(arr)
{
    let n = arr.length;
 
    if (n == 1)
    {
        return true;
    }
 
    // Find reciprocal of arr[] 
    let rec = [];
    for (let i = 0; i < n; i++)
    {
        rec.push((1 / arr[i]));
    }
 
    // return (rec); 
 
    // After finding reciprocal, check if 
    // the reciprocal is in A. P. 
    // To check for A.P., first Sort the 
    // reciprocal array, then check difference 
    // between consecutive elements 
    rec.sort((a,b) => a - b);
    let d = (rec[1]) - (rec[0]);
    for (let i = 2; i < n; i++)
    {
        if (rec[i] - rec[i - 1] != d)
        {
            return false;
        }
    }
 
    return true;
}
 
// Driver Code
    // series to check whether it is in H.P 
    let arr = [1 / 5, 1 / 10, 1 / 15, 1 / 20, 1 / 25];
 
    // Checking a series is in H.P or not 
    if (checkIsHP(arr))
    {
        document.write("Yes");
    }
    else
    {
        document.write("No");
    }
 
</script>

Producción:  

Yes

Complejidad Temporal: O(n Log n). 

Espacio Auxiliar: O(n)
Programa Básico relacionado con la Progresión Armónica 
 

¡Artículos recientes sobre la progresión armónica!
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *