HCF массива дробей (или рациональных чисел)
Опубликовано: 17 Января, 2022
Дан дробный ряд. Найдите HCF данного ряда дробей.
Примеры:
Ввод: [{2, 5}, {8, 9}, {16, 81}, {10, 27}]
Выход: 2, 405
Пояснение: 2/405 - наибольшее число, которое
делит все 2/5, 8/9, 16/81 и 10/27.
Ввод: [{9, 10}, {12, 25}, {18, 35}, {21, 40}]
Выход: 3, 1400
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Approach:
Find the H.C.F of numerators.
Find the L.C.M of denominators.
Calculate fraction of H.C.F/L.C.M.
Reduce the fraction to Lowest Fraction.
C++
// CPP program to find HCF of array of // rational numbers (fractions).#include <iostream>using namespace std; // hcf of two numberint gcd(int a, int b){ if (a % b == 0) return b; else return (gcd(b, a % b));} // find hcf of numerator seriesint findHcf(int** arr, int size){ int ans = arr[0][0]; for (int i = 1; i < size; i++) ans = gcd(ans, arr[i][0]); // return hcf of numerator return (ans);} // find lcm of denominator seriesint findLcm(int** arr, int size){ // ans contains LCM of arr[0][1], ..arr[i][1] int ans = arr[0][1]; for (int i = 1; i < size; i++) ans = (((arr[i][1] * ans)) / (gcd(arr[i][1], ans))); // return lcm of denominator return (ans);} // Core Functionint* hcfOfFraction(int** arr, int size){ // found hcf of numerator int hcf_of_num = findHcf(arr, size); // found lcm of denominator int lcm_of_deno = findLcm(arr, size); int* result = new int[2]; result[0] = hcf_of_num; result[1] = lcm_of_deno; for (int i = result[0] / 2; i > 1; i--) { if ((result[1] % i == 0) && (result[0] % i == 0)) { result[1] /= i; result[0] /= i; } } // return result return (result);} // Main functionint main(){ int size = 4; int** arr = new int*[size]; // Initialize the every row // with size 2 (1 for numerator // and 2 for denominator) for (int i = 0; i < size; i++) arr[i] = new int[2]; arr[0][0] = 9; arr[0][1] = 10; arr[1][0] = 12; arr[1][1] = 25; arr[2][0] = 18; arr[2][1] = 35; arr[3][0] = 21; arr[3][1] = 40; // function for calculate the result int* result = hcfOfFraction(arr, size); // print the result cout << result[0] << ", " << result[1] << endl; return 0;} |
Java
// Java program to find HCF of array of // rational numbers (fractions).class GFG { // hcf of two numberstatic int gcd(int a, int b){ if (a % b == 0) return b; else return (gcd(b, a % b));} // find hcf of numerator seriesstatic int findHcf(int [][]arr, int size){ int ans = arr[0][0]; for (int i = 1; i < size; i++) ans = gcd(ans, arr[i][0]); // return hcf of numerator return (ans);} // find lcm of denominator seriesstatic int findLcm(int[][] arr, int size){ // ans contains LCM of arr[0][1], ..arr[i][1] int ans = arr[0][1]; for (int i = 1; i < size; i++) ans = (((arr[i][1] * ans)) / (gcd(arr[i][1], ans))); // return lcm of denominator return (ans);} // Core Functionstatic int[] hcfOfFraction(int[][] arr, int size){ // found hcf of numerator int hcf_of_num = findHcf(arr, size); // found lcm of denominator int lcm_of_deno = findLcm(arr, size); int[] result = new int[2]; result[0] = hcf_of_num; result[1] = lcm_of_deno; for (int i = result[0] / 2; i > 1; i--) { if ((result[1] % i == 0) && (result[0] % i == 0)) { result[1] /= i; result[0] /= i; } } // return result return (result);} // Driver codepublic static void main(String[] args){ int size = 4; int[][] arr = new int[size][size]; // Initialize the every row // with size 2 (1 for numerator // and 2 for denominator) for (int i = 0; i < size; i++) arr[i] = new int[2]; arr[0][0] = 9; arr[0][1] = 10; arr[1][0] = 12; arr[1][1] = 25; arr[2][0] = 18; arr[2][1] = 35; arr[3][0] = 21; arr[3][1] = 40; // function for calculate the result int[] result = hcfOfFraction(arr, size); // print the result System.out.println(result[0] + ", " + result[1]); }} /* This code contributed by PrinciRaj1992 */ |
Python3
# Python 3 program to find HCF of array of from math import gcd # find hcf of numerator seriesdef findHcf(arr, size): ans = arr[0][0] for i in range(1, size, 1): ans = gcd(ans, arr[i][0]) # return hcf of numerator return (ans) # find lcm of denominator seriesdef findLcm(arr, size): # ans contains LCM of arr[0][1], ..arr[i][1] ans = arr[0][1] for i in range(1, size, 1): ans = int((((arr[i][1] * ans)) / (gcd(arr[i][1], ans)))) # return lcm of denominator return (ans) # Core Functiondef hcfOfFraction(arr, size): # found hcf of numerator hcf_of_num = findHcf(arr, size) # found lcm of denominator lcm_of_deno = findLcm(arr, size) result = [0 for i in range(2)] result[0] = hcf_of_num result[1] = lcm_of_deno i = int(result[0] / 2) while(i > 1): if ((result[1] % i == 0) and (result[0] % i == 0)): result[1] = int(result[1] / i) result[0] = (result[0] / i) # return result return (result) # Driver Codeif __name__ == "__main__": size = 4 arr = [0 for i in range(size)] # Initialize the every row # with size 2 (1 for numerator # and 2 for denominator) for i in range(size): arr[i] = [0 for i in range(2)] arr[0][0] = 9 arr[0][1] = 10 arr[1][0] = 12 arr[1][1] = 25 arr[2][0] = 18 arr[2][1] = 35 arr[3][0] = 21 arr[3][1] = 40 # function for calculate the result result = hcfOfFraction(arr, size) # print the result print(result[0], ",", result[1]) # This code is contributed by# Surendra_Gangwar |
C#
// C# program to find HCF of array of // rational numbers (fractions).using System; class GFG { // hcf of two numberstatic int gcd(int a, int b){ if (a % b == 0) return b; else return (gcd(b, a % b));} // find hcf of numerator seriesstatic int findHcf(int [,]arr, int size){ int ans = arr[0, 0]; for (int i = 1; i < size; i++) ans = gcd(ans, arr[i, 0]); // return hcf of numerator return (ans);} // find lcm of denominator seriesstatic int findLcm(int[,] arr, int size){ // ans contains LCM of arr[0,1], ..arr[i,1] int ans = arr[0,1]; for (int i = 1; i < size; i++) ans = (((arr[i, 1] * ans)) / (gcd(arr[i, 1], ans))); // return lcm of denominator return (ans);} // Core Functionstatic int[] hcfOfFraction(int[,] arr, int size){ // found hcf of numerator int hcf_of_num = findHcf(arr, size); // found lcm of denominator int lcm_of_deno = findLcm(arr, size); int[] result = new int[2]; result[0] = hcf_of_num; result[1] = lcm_of_deno; for (int i = result[0] / 2; i > 1; i--) { if ((result[1] % i == 0) && (result[0] % i == 0)) { result[1] /= i; result[0] /= i; } } // return result return (result);} // Driver codepublic static void Main(String[] args){ int size = 4; int[,] arr = new int[size, size]; // Initialize the every row // with size 2 (1 for numerator // and 2 for denominator) arr[0, 0] = 9; arr[0, 1] = 10; arr[1, 0] = 12; arr[1, 1] = 25; arr[2, 0] = 18; arr[2, 1] = 35; arr[3, 0] = 21; arr[3, 1] = 40; // function for calculate the result int[] result = hcfOfFraction(arr, size); // print the result Console.WriteLine(result[0] + ", " + result[1]); }} // This code has been contributed by 29AjayKumar |
Выход:
3, 1400
Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные математические концепции для соревновательного программирования с курсом Essential Maths for CP по доступной для студентов цене. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .