summaryrefslogtreecommitdiff
path: root/src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c
diff options
context:
space:
mode:
authorJorawar Singh2017-06-30 11:54:22 +0530
committerJorawar Singh2017-06-30 11:54:22 +0530
commita7d283ae2899b2530ac70a2453d4db05d03d609d (patch)
treefb93a9edddeee4601c47ce73e173331fa3addac8 /src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c
parentaef4e8398f2b1848b0e4cdd9580dbbe93e4006f9 (diff)
parentbee6bf6e37f6c36fb18b6132702e1528b7edafc2 (diff)
downloadScilab2C_fossee_old-a7d283ae2899b2530ac70a2453d4db05d03d609d.tar.gz
Scilab2C_fossee_old-a7d283ae2899b2530ac70a2453d4db05d03d609d.tar.bz2
Scilab2C_fossee_old-a7d283ae2899b2530ac70a2453d4db05d03d609d.zip
merged main repo with local
Diffstat (limited to 'src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c')
-rw-r--r--src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c b/src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c
new file mode 100644
index 0000000..56856e4
--- /dev/null
+++ b/src/c/elementaryFunctions/discrete_mathematics/lcm/u8lcma.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ This file must be used under the terms of the CeCILL.
+ This source file is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at
+ http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+#include<stdio.h>
+/* This is the "lcm" function, accepting two inputs which are the array of integers
+ and second the size of the array. The algorithm works like this:
+ We take a temproary variable and store the lcm of the first two elements of the
+ array in it. Now using this temproary variable we recursively fin the lcm of
+ the whole array.
+ Now to fin the lcm of two elements we fin the maximum of the two elements and
+ check whether it is divisible by both the elements, if the condition is true we
+ get the lcm, else increase the maximum value by itself unless we get the lcm.
+*/
+#include "lcm.h"
+uint8 u8lcma(uint8* in,int size)
+{
+ long long int lcm_temp;
+ if(size==1)
+ {
+ lcm_temp=*in;
+ }
+ else
+ {
+
+ int x1=*in;
+ int x2=*(in+1);
+ long long int max=(x1>x2)?x1:x2;
+ long long int i=max;
+ while(1)
+ {
+ if(i%x1==0 && i%x2==0)
+ {
+ lcm_temp=i;
+ break;
+ }
+ else
+ i+=max;
+ }
+ for(int j=2;j<size;j++)
+ {
+ x1=lcm_temp;
+ x2=*(in+j);
+ max=(x1>x2)?x1:x2;
+ i=max;
+ while(1)
+ {
+ if(i%x1==0 && i%x2==0)
+ {
+ lcm_temp=i;
+ break;
+ }
+ else
+ i+=max;
+ }
+ }
+
+ }
+ return lcm_temp;
+}
+