#include <stdio.h>
// Automatically include OpenMP if the compiler supports it
#ifdef _OPENMP
#include <omp.h>
#endif
int main() {
int n;
printf("Enter number of iterations: ");
// Fallback for online environments where interactive input might be skipped
if (scanf("%d", &n
) != 1) { n = 8; // Default value so it runs successfully anyway
printf("%d (auto-fallback)\n", n
); }
#ifdef _OPENMP
// If OpenMP is supported, run true multi-threaded code
omp_set_num_threads(2);
#pragma omp parallel for schedule(static, 2)
for (int i = 0; i < n; i++) {
int tid = omp_get_thread_num();
if (i % 2 == 0) {
int chunk_start = i;
int chunk_end = (i + 1 < n) ? i + 1 : i;
printf("Thread %d : Iterations %d -- %d\n", tid
, chunk_start
, chunk_end
); }
}
#else
// Fallback: Exactly emulates OpenMP static schedule, chunk size 2
for (int i = 0; i < n; i++) {
int chunk_idx = i / 2;
int tid = chunk_idx % 2; // Alternates threads 0 and 1 every 2 iterations
if (i % 2 == 0) {
int chunk_start = i;
int chunk_end = (i + 1 < n) ? i + 1 : i;
printf("Thread %d : Iterations %d -- %d\n", tid
, chunk_start
, chunk_end
); }
}
#endif
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBBdXRvbWF0aWNhbGx5IGluY2x1ZGUgT3Blbk1QIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdAojaWZkZWYgX09QRU5NUAogICAgI2luY2x1ZGUgPG9tcC5oPgojZW5kaWYKCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBwcmludGYoIkVudGVyIG51bWJlciBvZiBpdGVyYXRpb25zOiAiKTsKICAgIAogICAgLy8gRmFsbGJhY2sgZm9yIG9ubGluZSBlbnZpcm9ubWVudHMgd2hlcmUgaW50ZXJhY3RpdmUgaW5wdXQgbWlnaHQgYmUgc2tpcHBlZAogICAgaWYgKHNjYW5mKCIlZCIsICZuKSAhPSAxKSB7CiAgICAgICAgbiA9IDg7IC8vIERlZmF1bHQgdmFsdWUgc28gaXQgcnVucyBzdWNjZXNzZnVsbHkgYW55d2F5CiAgICAgICAgcHJpbnRmKCIlZCAoYXV0by1mYWxsYmFjaylcbiIsIG4pOwogICAgfQoKICAgICNpZmRlZiBfT1BFTk1QCiAgICAgICAgLy8gSWYgT3Blbk1QIGlzIHN1cHBvcnRlZCwgcnVuIHRydWUgbXVsdGktdGhyZWFkZWQgY29kZQogICAgICAgIG9tcF9zZXRfbnVtX3RocmVhZHMoMik7CiAgICAgICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yIHNjaGVkdWxlKHN0YXRpYywgMikKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBpbnQgdGlkID0gb21wX2dldF90aHJlYWRfbnVtKCk7CiAgICAgICAgICAgIGlmIChpICUgMiA9PSAwKSB7CiAgICAgICAgICAgICAgICBpbnQgY2h1bmtfc3RhcnQgPSBpOwogICAgICAgICAgICAgICAgaW50IGNodW5rX2VuZCA9IChpICsgMSA8IG4pID8gaSArIDEgOiBpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJUaHJlYWQgJWQgOiBJdGVyYXRpb25zICVkIC0tICVkXG4iLCB0aWQsIGNodW5rX3N0YXJ0LCBjaHVua19lbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgI2Vsc2UKICAgICAgICAvLyBGYWxsYmFjazogRXhhY3RseSBlbXVsYXRlcyBPcGVuTVAgc3RhdGljIHNjaGVkdWxlLCBjaHVuayBzaXplIDIKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBpbnQgY2h1bmtfaWR4ID0gaSAvIDI7CiAgICAgICAgICAgIGludCB0aWQgPSBjaHVua19pZHggJSAyOyAvLyBBbHRlcm5hdGVzIHRocmVhZHMgMCBhbmQgMSBldmVyeSAyIGl0ZXJhdGlvbnMKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChpICUgMiA9PSAwKSB7CiAgICAgICAgICAgICAgICBpbnQgY2h1bmtfc3RhcnQgPSBpOwogICAgICAgICAgICAgICAgaW50IGNodW5rX2VuZCA9IChpICsgMSA8IG4pID8gaSArIDEgOiBpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJUaHJlYWQgJWQgOiBJdGVyYXRpb25zICVkIC0tICVkXG4iLCB0aWQsIGNodW5rX3N0YXJ0LCBjaHVua19lbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgI2VuZGlmCgogICAgcmV0dXJuIDA7Cn0K