Hi, how can I get the common multiples of all element of array for example I have this array 2 4 3 . And I want to get the common multiples I do this code but not working. Can someone help me please. Thanks.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution {
/*
* Complete the getTotalX function below.
*/
static int getTotalX(int[] a, int[] b) {
/*
* Write your code here.
*/
int n = a.Length;
for (int j = 0; j < n; j++) {
// if we find the common multiples betwen element of array a we return those common mutiples
if (a[i] * j == a[i + 1] * j && a[i] % j == 0 && a[i + 1] % j == 0) {
return a[i] * j;
}
}
static void Main(string[] args) {
TextWriter tw = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);
string[] nm = Console.ReadLine().Split(' ');
int n = Convert.ToInt32(nm[0]);
int m = Convert.ToInt32(nm[1]);
int[] a = Array.ConvertAll(Console.ReadLine().Split(' '), aTemp => Convert.ToInt32(aTemp));
int[] b = Array.ConvertAll(Console.ReadLine().Split(' '), bTemp => Convert.ToInt32(bTemp));
int total = getTotalX(a, b);
tw.WriteLine(total);
tw.Flush();
tw.Close();
}
}
Here is all in one solution for you, which contains, GCD, LCM, common multiples functions in C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace CommonMultiples
{
class Program
{
//get LCM of all elements of an array
public static long LCMofArrayNumbers(int[] numbers)
{
long lcm = 1;
int divisor = 2;
while (true)
{
int cnt = 0;
bool divisible = false;
for (int i = 0; i < numbers.Length; i++)
{
/**
* lcm (n1,n2,... 0)=0.For negative number we convert into
* positive and calculate lcm.
*/
if (numbers[i] == 0)
{
return 0;
}
else if (numbers[i] < 0)
{
numbers[i] = numbers[i] * (-1);
}
if (numbers[i] == 1)
{
cnt++;
}
/**
* divide numbers by devisor if complete division i.e. without
* remainder then replace number with quotient; used for find
* next factor
*/
if (numbers[i] % divisor == 0)
{
divisible = true;
numbers[i] = numbers[i] / divisor;
}
}
/**
* If divisor able to completely divide any number from array
* multiply with lcm and store into lcm and continue to same divisor
* for next factor finding. else increment divisor
*/
if (divisible)
{
lcm = lcm * divisor;
}
else
{
divisor++;
}
/**
* Check if all numbers is 1 indicate we found all factors and
* terminate while loop.
*/
if (cnt == numbers.Length)
{
return lcm;
}
}
}
// Function to return gcd of a and b
public static int gcd(int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
// Function to find gcd of
// array of numbers
public static int findGCD(int[] arr, int n)
{
int result = arr[0];
for (int i = 1; i < n; i++)
result = gcd(arr[i], result);
return result;
}
// method to calculate all
// common divisors of two
// given numbers a, b -->
// input integer numbers
public static int commDiv(int n)
{
// find gcd of a,b
// int n = gcd(a, b);
// Count divisors of n.
int result = 0;
for (int i = 1; i <= n; i++)
{
// if 'i' is factor of n
if (n % i == 0)
{
// check if divisors are equal
if (n / i == i)
{
result += 1;
Console.WriteLine(i);
}
else
{
result += 2;
Console.WriteLine(i);
}
}
}
return result;
}
//to get LCM of two numbers only
public static int lcm2(int num1, int num2)
{
if (num1 == 0 || num2 == 0)
{
return 0;
}
else if (num1 < 0)
{
num1 = num1 * (-1);
}
else if (num2 < 0)
{
num2 = num2 * (-1);
}
int m = num1;
int n = num2;
while (num1 != num2)
{
if (num1 < num2)
{
num1 = num1 + m;
}
else
{
num2 = num2 + n;
}
}
return num1;
}
public static List<int> GetCommonMultiples(int[] numbers)
{
var CommonList = new List<int>();
var AllElementsLIst = new List<int>();
int i,j = 0;
//loop through all elements of array
for( i = 0 ; i < numbers.Length; i++)
{
var Element = numbers[i];
//save multiple of each elements of array multiple of upto 10 here
for( j =1; j< 10; j++)
{
AllElementsLIst.Add(j*Element);
}
}
CommonList= AllElementsLIst.GroupBy(x => x).Where(g => g.Count() >= 2).Select(g => g.Key).ToList();
Console.WriteLine("{0}", string.Join(", ", CommonList));
return CommonList;
}
public static void Main()
{
int[] numbers = { 2, 22, 4 };
Console.WriteLine("LCM(Least Common Multiple) of above numbers is");
Console.WriteLine(LCMofArrayNumbers(numbers));
Console.WriteLine("LCM of two numbers using repetative addition");
Console.WriteLine(lcm2(2, 8));
Console.WriteLine("Common divisible elements of array");
int[] arr = { 2, 4, 8};
int n = arr.Length;
var CommonGCD=findGCD(arr, n);
commDiv(CommonGCD);
GetCommonMultiples(arr);
}
}
}
After executing above Program in C# console app, here is the output of the above program
Hope it helps.
I think you are trying to find least common multiples of all elements of an array, I tried executing your above code but it has lots of errors, so created my all program, which finds LCM of all elements of an array of LCM of two numbers in C#
using System;
namespace CommonMultiples
{
class Program
{
//get LCM of all elements of an array
public static long LCMofArrayNumbers(int[] numbers)
{
long lcm = 1;
int divisor = 2;
while (true)
{
int cnt = 0;
bool divisible = false;
for (int i = 0; i < numbers.Length; i++)
{
/**
* lcm (n1,n2,... 0)=0.For negative number we convert into
* positive and calculate lcm.
*/
if (numbers[i] == 0)
{
return 0;
}
else if (numbers[i] < 0)
{
numbers[i] = numbers[i] * (-1);
}
if (numbers[i] == 1)
{
cnt++;
}
/**
* divide numbers by devisor if complete division i.e. without
* remainder then replace number with quotient; used for find
* next factor
*/
if (numbers[i] % divisor == 0)
{
divisible = true;
numbers[i] = numbers[i] / divisor;
}
}
/**
* If divisor able to completely divide any number from array
* multiply with lcm and store into lcm and continue to same divisor
* for next factor finding. else increment divisor
*/
if (divisible)
{
lcm = lcm * divisor;
}
else
{
divisor++;
}
/**
* Check if all numbers is 1 indicate we found all factors and
* terminate while loop.
*/
if (cnt == numbers.Length)
{
return lcm;
}
}
}
//to get LCM of two numbers only
public static int lcm2(int num1, int num2)
{
if (num1 == 0 || num2 == 0)
{
return 0;
}
else if (num1 < 0)
{
num1 = num1 * (-1);
}
else if (num2 < 0)
{
num2 = num2 * (-1);
}
int m = num1;
int n = num2;
while (num1 != num2)
{
if (num1 < num2)
{
num1 = num1 + m;
}
else
{
num2 = num2 + n;
}
}
return num1;
}
public static void Main()
{
int[] numbers = { 2, 22, 4 };
Console.WriteLine("LCM(Least Common Multiple) of above numbers is");
Console.WriteLine(LCMofArrayNumbers(numbers));
Console.WriteLine("LCM of two numbers using repetative addition");
Console.WriteLine(lcm2(2, 8));
}
}
}
Executing it in Visual studio console app gives output as below
There are two methods in the above program, one of which finds common multiples of array elements, I have commented out few important points to understand the code.
Hi,thanks Jaya for your reply. but just to explain you I need to return the common multiples for 2 and 4.
for exampple we have this array 4,2 and the common multiples for 2 and 4 are 4,8,12,16
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
2*10=20
4*1=4
4*2=8
4*3=12
4*4=16
4*5=20
4*6=24
4*7=28
4*8=32
4*9=36
4*10=40
so the common multiples are the equal result product in this case 4 8 12 16 are the common multiples I need to return those numbers and if I have in table more than 2 numbers need to return all common multiples between those numbers. Thanks.
Subscribe to our weekly Newsletter & Keep getting latest article/questions in your inbox weekly