给定两个数字’a’和’b’使得(0 <= a <= 10 ^ 12和b <= b <10 ^ 250)。找到两个给定数字的GCD。
例子 :
Input: a = 978
b = 89798763754892653453379597352537489494736
Output: 6
Input: a = 1221
b = 1234567891011121314151617181920212223242526272829
Output: 3
解决方案:在给定的问题中,我们可以看到第一个数字’a’可以由long long int数据类型处理,但是第二个数字’b’不能由任何int数据类型处理。在这里,我们将第二个数字读取为字符串,并通过将其与“ a”取模来使其小于和等于“ a”。
以下是上述想法的实现。
C++
// C++ program to find GCD of two numbers such that
// the second number can be very large.
#include
using namespace std;
typedef long long int ll;
// function to find gcd of two integer numbers
ll gcd(ll a, ll b)
{
if (!a)
return b;
return gcd(b%a,a);
}
// Here 'a' is integer and 'b' is string.
// The idea is to make the second number (represented
// as b) less than and equal to first number by
// calculating its mod with first integer number
// using basic mathematics
ll reduceB(ll a, char b[])
{
// Initialize result
ll mod = 0;
// calculating mod of b with a to make
// b like 0 <= b < a
for (int i=0; i
Java
// Java program to find
// GCD of two numbers
// such that the second
// number can be very large.
class GFG
{
// This function computes
// the gcd of 2 numbers
private static int gcd(int reduceNum, int b)
{
return b == 0 ?
reduceNum : gcd(b, reduceNum % b);
}
// Here 'a' is integer and 'b'
// is string. The idea is to make
// the second number (represented
// as b) less than and equal to
// first number by calculating its
// modulus with first integer
// number using basic mathematics
private static int reduceB(int a, String b)
{
int result = 0;
for (int i = 0; i < b.length(); i++)
{
result = (result * 10 +
b.charAt(i) - '0') % a;
}
return result;
}
private static int gcdLarge(int a, String b)
{
// Reduce 'b' i.e the second
// number after modulo with a
int num = reduceB(a, b);
// Now,use the euclid's algorithm
// to find the gcd of the 2 numbers
return gcd(num, a);
}
// Driver code
public static void main(String[] args)
{
// First Number which
// is the integer
int a = 1221;
// Second Number is represented
// as a string because it cannot
// be represented as an integer
// data type
String b = "19837658191095787329";
if (a == 0)
System.out.println(b);
else
System.out.println(gcdLarge(a, b));
}
// This code is contributed
// by Tanishq Saluja.
}
Python3
# Python3 program to find GCD of
# two numbers such that the second
# number can be very large.
# Function to find gcd
# of two integer numbers
def gcd(a, b) :
if (a == 0) :
return b
return gcd(b % a, a)
# Here 'a' is integer and 'b' is string.
# The idea is to make the second number
# (represented as b) less than and equal
# to first number by calculating its mod
# with first integer number using basic
# mathematics
def reduceB(a, b) :
# Initialize result
mod = 0
# Calculating mod of b with a
# to make b like 0 <= b < a
for i in range(0, len(b)) :
mod = (mod * 10 + ord(b[i])) % a
return mod # return modulo
# This function returns GCD of
# 'a' and 'b' where b can be
# very large and is represented
# as a character array or string
def gcdLarge(a, b) :
# Reduce 'b' (second number)
# after modulo with a
num = reduceB(a, b)
# gcd of two numbers
return gcd(a, num)
# Driver program
# First number which is integer
a = 1221
# Second number is represented
# as string because it can not
# be handled by integer data type
b = "1234567891011121314151617181920212223242526272829"
if a == 0:
print(b)
else:
print(gcdLarge(a, b))
# This code is contributed by Nikita Tiwari.
C#
// C# program to find GCD of
// two numbers such that the
// second number can be very large.
using System;
class GFG
{
// function to find gcd
// of two integer numbers
public long gcd(long a, long b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
// Here 'a' is integer and
// 'b' is string. The idea
// is to make the second
// number (represented as b)
// less than and equal to
// first number by calculating
// its mod with first integer
// number using basic mathematics
public long reduceB(long a, string b)
{
// Initialize result
long mod = 0;
// calculating mod of
// b with a to make
// b like 0 <= b < a
for (int i = 0; i < b.Length; i++)
mod = (mod * 10 +
(b[i] - '0')) % a;
return mod;
}
// This function returns GCD
// of 'a' and 'b' where b can
// be very large and is
// represented as a character
// array or string
public long gcdLarge(long a, string b)
{
// Reduce 'b' (second number)
// after modulo with a
long num = reduceB(a, b);
// gcd of two numbers
return gcd(a, num);
}
// Driver Code
static void Main()
{
// first number
// which is integer
long a = 1221;
// second number is represented
// as string because it can not
// be handled by integer data type
string b = "1234567891011121314151617181920212223242526272829";
GFG p = new GFG();
if (a == 0)
Console.WriteLine(b);
else
Console.WriteLine(p.gcdLarge(a, b));
}
}
// This code is contributed by mits.
PHP
Javascript
输出 :
3