int main() { char* arr = NULL; // Pointer to byte, initialize to nothing. uint64_t n = 4294967296u; arr = new char[n]; // Allocate n bytes and save ptr in arr. //for (uint64_t i = 0; i < n; i++) { // arr[(uint32_t)i] = 0; // Initialize all elements to zero... not required for .NET //} for (int j = 1; j < 28; j++) { // A maximum of 27 allowed streams seems fine for (int64_t i = n; i > 0; i--) { arr[xoroacc32()]++; // Accumulate 2^32 outputs (not 2^32-1!!!) } uint32_t k = 0; for (uint64_t i = 0; i < n; i++) { k += (arr[i] == 0); // Tally the zeros. } std::cout << j << "," << k << "\n"; // Report stream result if (k == 0) break; // exit loop if all 2^32 values have been generated } delete[] arr; // When done, free memory pointed to by arr... arr = NULL; // and wipe pointer, just in case std::cin.get(); // wait for keypress return 0; }