From 1cd7387231bddf9a10efedeb29e7c6fad46cab18 Mon Sep 17 00:00:00 2001 From: Rishu Rajan <56962548+RishuRajan@users.noreply.github.com> Date: Thu, 1 Oct 2020 18:02:18 +0530 Subject: [PATCH 1/3] Create BinaryExponentiation --- Mathematics_Algo/BinaryExponentiation | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Mathematics_Algo/BinaryExponentiation diff --git a/Mathematics_Algo/BinaryExponentiation b/Mathematics_Algo/BinaryExponentiation new file mode 100644 index 0000000..74077e4 --- /dev/null +++ b/Mathematics_Algo/BinaryExponentiation @@ -0,0 +1,31 @@ +//This ia a technnique to calculate (a^n) in O(logn) time complexity +#include +using namespace std; +int power(int base,int num) +{ + int result=1; + while(num>0) + { + if(num%2) + { + result=result*base; + num--; + } + else + { + base=base*base; + num=num/2; + } + } + return result; +} +int main() +{ + int b,n,r; + cout<<"Enter Base And Power:"; + cin>>b>>n; + power(b,n); + r=power(b,n); + cout< Date: Thu, 1 Oct 2020 18:13:18 +0530 Subject: [PATCH 2/3] Create ModularExponentiation --- Mathematics_Algo/ModularExponentiation | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Mathematics_Algo/ModularExponentiation diff --git a/Mathematics_Algo/ModularExponentiation b/Mathematics_Algo/ModularExponentiation new file mode 100644 index 0000000..10a2f0c --- /dev/null +++ b/Mathematics_Algo/ModularExponentiation @@ -0,0 +1,21 @@ +//It is a technique to calculate (a^n)%p where p is prime +#include +using namespace std; +int modulararithmetic(int base,int power,int p) +{ + int result=1; + while(power) + { + if(power%2) + { + result=(result*base)%p; + power--; + } + else + { + base=(base*base)%p; + power=power/2; + } + } + return power; +} From df26468b9dac9de68552374a439beb9ed7d4c7c9 Mon Sep 17 00:00:00 2001 From: Rishu Rajan <56962548+RishuRajan@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:14:18 +0530 Subject: [PATCH 3/3] Create RabinKrabAlgorithm --- String_Algo/RabinKrabAlgorithm | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 String_Algo/RabinKrabAlgorithm diff --git a/String_Algo/RabinKrabAlgorithm b/String_Algo/RabinKrabAlgorithm new file mode 100644 index 0000000..2291f44 --- /dev/null +++ b/String_Algo/RabinKrabAlgorithm @@ -0,0 +1,48 @@ +//This Algorithm is badically helpful in Pattern Searching +/* pat -> pattern + txt -> text + q -> A prime number +*/ +Algorithm given in the CLRS book */ +#include +using namespace std; +#define d 256 // d is the number of characters in the input alphabet +void rabinkrabsearch(char pat[], char txt[], int q) +{ + int M = strlen(pat); + int N = strlen(txt); + int i, j; + int p = 0; // hash value for pattern + int t = 0; // hash value for txt + int h = 1; + for (i = 0; i < M - 1; i++) + h = (h * d) % q; + for (i = 0; i < M; i++) + { + p = (d * p + pat[i]) % q; + t = (d * t + txt[i]) % q; + } + for (i = 0; i <= N - M; i++) + { + if ( p == t ) + { + for (j = 0; j < M; j++) + { + if (txt[i+j] != pat[j]) + break; + } + if (j == M) + cout<<"Pattern found at index "<< i<