Skip to content

Instantly share code, notes, and snippets.

@quickgrid
Last active October 17, 2019 16:03
Show Gist options
  • Save quickgrid/f506e3fbb470a07648bad7fe87482bdd to your computer and use it in GitHub Desktop.
Save quickgrid/f506e3fbb470a07648bad7fe87482bdd to your computer and use it in GitHub Desktop.
C++ Class Object Oriented Fast Successive Sum Generation
/*
* Site: quickgrid.blogspot.com
* Any suggestions for faster or better implementation is welcome.
* 17-10-2019 removed personal headers, now the code will work directly.
*/
#include<iostream>
using namespace std;
class SuccessiveSums {
public:
SuccessiveSums() {
}
~SuccessiveSums() {
}
int PRNG()
{
static unsigned int nSeed = 3287;
nSeed = (9653748 * nSeed + 3497802);
return nSeed % 100;
}
int square(int v) {
if (v) {
v = (v < 0) ? -v : v;
int n = v >> 1;
if (v & 1) {
return ((square(n) << 2) + (n << 2) + 1);
}
else {
return (square(n) << 2);
}
}
return 0;
}
void generateSuccessiveSums(int* arr, int* storage_array, int N) {
// Generate Level 0
for (int j = 1, i = 0; j < N; i = j, ++j) {
storage_array[i] = arr[i] + arr[j];
}
int loop_limit = N - 1;
for (int k = 1; k < loop_limit; ++k)
{
int tmp1 = N - k;
int tmp2 = k * N;
int tmp3 = tmp2 - N;
for (int j = 1, i = 0; j < tmp1; i = j, ++j) {
storage_array[tmp2 + i] = storage_array[tmp3 + i] + storage_array[tmp3 + j];
}
}
}
void printSums(int v, int* storage_array, int N) {
int k = 0;
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i) {
cout << storage_array[k++] << "\t";
}
cout << "\n";
}
}
};
int main() {
SuccessiveSums* sum_generator = new SuccessiveSums();
const int N = 7;
int* arr = new int[N];
for (int i = 0; i < N; i++)
{
arr[i] = sum_generator->PRNG();
}
// For compact array
//int val = ((sum_generator->square(N) + (long long)N) >> 1);
int val = sum_generator->square(N);
cout << "SQUARE VALUE:" << val <<"\n\n";
int* sum_holder = new int[val + (long long)1];
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
sum_holder[i * N + j] = 0;
}
}
int* sum_holder1 = new int[val + (long long)1];
sum_generator->generateSuccessiveSums(arr, sum_holder, N);
sum_generator->printSums(val, sum_holder, N);
delete sum_generator;
delete[] sum_holder;
delete[] arr;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment