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< +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; +} 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<