给定N个分数的乘积的约化形式

给定N个分数的分子和分母。其任务是求N分数的乘积,并以简化形式输出答案。 例如:

null
Input : N = 3        num[] = { 1, 2, 5 }        den[] = { 2, 1, 6 }Output : 5/6Product of 1/2 * 2/1 * 5/6 is 10/12.Reduced form of 10/12 is 5/6.Input : N = 4        num[] = { 1, 2, 5, 9 }        den[] = { 2, 1, 6, 27 }Output : 5/18

这个想法是在一个变量中找到分子的乘积,比如new_num。现在,在另一个变量中找到分母的乘积,比如new_den。 现在,为了找到简化形式的答案,找到new_num和new_den的最大公约数,并将new_num和new_den除以计算出的GCD。 以下是该方法的实施情况:

C++

// CPP program to find product of N
// fractions in reduced form.
#include <bits/stdc++.h>
using namespace std;
// Function to return gcd of a and b
int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
// Print the Product of N fraction in Reduced Form.
void productReduce( int n, int num[], int den[])
{
int new_num = 1, new_den = 1;
// finding the product of all N
// numerators and denominators.
for ( int i = 0; i < n; i++) {
new_num *= num[i];
new_den *= den[i];
}
// Finding GCD of new numerator and
// denominator
int GCD = gcd(new_num, new_den);
// Converting into reduced form.
new_num /= GCD;
new_den /= GCD;
cout << new_num << "/" << new_den << endl;
}
// Driven Program
int main()
{
int n = 3;
int num[] = { 1, 2, 5 };
int den[] = { 2, 1, 6 };
productReduce(n, num, den);
return 0;
}


JAVA

// Java program to find product of N
// fractions in reduced form.
import java.io.*;
class GFG {
// Function to return gcd of a and b
static int gcd( int a, int b)
{
if (a == 0 )
return b;
return gcd(b % a, a);
}
// Print the Product of N fraction in
// Reduced Form.
static void productReduce( int n, int num[],
int den[])
{
int new_num = 1 , new_den = 1 ;
// finding the product of all N
// numerators and denominators.
for ( int i = 0 ; i < n; i++) {
new_num *= num[i];
new_den *= den[i];
}
// Finding GCD of new numerator and
// denominator
int GCD = gcd(new_num, new_den);
// Converting into reduced form.
new_num /= GCD;
new_den /= GCD;
System.out.println(new_num + "/" +new_den);
}
// Driven Program
public static void main (String[] args) {
int n = 3 ;
int num[] = { 1 , 2 , 5 };
int den[] = { 2 , 1 , 6 };
productReduce(n, num, den);
}
}
//This code is contributed by vt_m.


Python3

# Python3 program to find
# product of N fractions
# in reduced form.
# Function to return
# gcd of a and b
def gcd(a, b):
if (a = = 0 ):
return b;
return gcd(b % a, a);
# Print the Product of N
# fraction in Reduced Form.
def productReduce(n, num, den):
new_num = 1 ;
new_den = 1 ;
# finding the product
# of all N numerators
# and denominators.
for i in range (n):
new_num = new_num * num[i];
new_den = new_den * den[i];
# Finding GCD of
# new numerator
# and denominator
GCD = gcd(new_num, new_den);
# Converting into
# reduced form.
new_num = new_num / GCD;
new_den = new_den / GCD;
print ( int (new_num), "/" ,
int (new_den));
# Driver Code
n = 3 ;
num = [ 1 , 2 , 5 ];
den = [ 2 , 1 , 6 ];
productReduce(n, num, den);
# This code is contributed
# by mits


C#

// C# program to find product of N
// fractions in reduced form.
using System;
class GFG {
// Function to return gcd of a and b
static int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
// Print the Product of N fraction in
// Reduced Form.
static void productReduce( int n, int []num,
int []den)
{
int new_num = 1, new_den = 1;
// finding the product of all N
// numerators and denominators.
for ( int i = 0; i < n; i++) {
new_num *= num[i];
new_den *= den[i];
}
// Finding GCD of new numerator and
// denominator
int GCD = gcd(new_num, new_den);
// Converting into reduced form.
new_num /= GCD;
new_den /= GCD;
Console.WriteLine(new_num + "/" +new_den);
}
// Driven Program
public static void Main () {
int n = 3;
int []num = { 1, 2, 5 };
int []den = { 2, 1, 6 };
productReduce(n, num, den);
}
}
//This code is contributed by vt_m.


PHP

<?php
// PHP program to find product of N
// fractions in reduced form.
// Function to return
// gcd of a and b
function gcd( $a , $b )
{
if ( $a == 0)
return $b ;
return gcd( $b % $a , $a );
}
// Print the Product of N
// fraction in Reduced Form.
function productReduce( $n , $num , $den )
{
$new_num = 1; $new_den = 1;
// finding the product of all N
// numerators and denominators.
for ( $i = 0; $i < $n ; $i ++)
{
$new_num *= $num [ $i ];
$new_den *= $den [ $i ];
}
// Finding GCD of new
// numerator and denominator
$GCD = gcd( $new_num , $new_den );
// Converting into reduced form.
$new_num /= $GCD ;
$new_den /= $GCD ;
echo $new_num , "/" , $new_den , "" ;
}
// Driver Code
$n = 3;
$num = array (1, 2, 5);
$den = array (2, 1, 6);
productReduce( $n , $num , $den );
// This code is contributed by ajit
?>


Javascript

<script>
// JavaScript program to find product of N
// fractions in reduced form.
// Function to return gcd of a and b
function gcd( a,  b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
// Print the Product of N fraction in Reduced Form.
function productReduce( n,  num , den)
{
let new_num = 1, new_den = 1;
// finding the product of all N
// numerators and denominators.
for (let i = 0; i < n; i++) {
new_num *= num[i];
new_den *= den[i];
}
// Finding GCD of new numerator and
// denominator
let GCD = gcd(new_num, new_den);
// Converting into reduced form.
new_num /= GCD;
new_den /= GCD;
document.write( new_num + "/" + new_den);
}
// Driven Program
let n = 3;
let num = [ 1, 2, 5 ];
let den = [ 2, 1, 6 ];
productReduce(n, num, den);
// This code contributed by aashish1995
</script>


输出:

5/6

如何避免溢出? 上述解决方案会导致大量数据溢出。我们可以先避免溢出 寻找主要因素 所有的分子和分母。一旦我们找到素数因子,我们就可以取消常见的素数因子。 注: 当你被要求以{P imes{Q}^{-1}的形式表示答案时。 对于这些问题,首先将分子和分母转换为可约化形式P/Q,如上所述。然后,找到 模乘逆 关于质数m(通常为10^9+7)的Q的函数。在找到Q的模乘逆之后,将其与P相乘,并取给定素数m的模,这将给出我们所需的输出。 //谢谢 瓦伊布兹克 感谢你提出这种情况。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享