#include <stdio.h>
#include <string.h>
int gcd(int a, int b){
if(b == 0){
return a;
}
return gcd(b, a % b);
}
int main(){
int r,c;
printf("Enter Row (R) and Column (C) : "); //Taking Row and Column input
scanf("%d%d", &r, &c);
int arr[r][c];
printf("Enter all the numbers\n"); // Taking all the numbers
for(int i = 0; i<r; i++){
for(int j = 0; j<c; j++){
scanf("%d", &arr[i][j]);
}
}
int maximum_gcd[r]; // taking this array to store pairwise gcd
int temp[(c*(c+1))/2]; // taking this array to store all the possible gcd of each row
memset(temp, 0, sizeof(temp)); // clearing garbage value of temp array.
int itr = 0; //took this integer to keep track of the indexing in temp array.
for(int i = 0; i<r; i++){
itr = 0;
for(int j = 0; j<c-1; j++){
for(int k = j+1; k<c; k++){
temp[itr++] = gcd(arr[i][j], arr[i][k]); //finding all the gcd's
}
}
int maxi = -1;
for(int q= 0; q<(c*(c+1))/2; q++){ // fidning the maximum gcd in temp array
if(maxi<temp[q]){
maxi = temp[q];
}
}
maximum_gcd[i] = maxi; // keeping the maximum gcd in the array.
memset(temp, 0, sizeof(temp)); // again, clearing all the values of temp for next iteration.
}
for(int i = 0; i<r; i++){
printf("Row %d's Max Pairwise GCD : %d\n", i+1, maximum_gcd[i]);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBnY2QoaW50IGEsIGludCBiKXsKICAgIGlmKGIgPT0gMCl7CiAgICAgICAgcmV0dXJuIGE7CiAgICB9CiAgICByZXR1cm4gZ2NkKGIsIGEgJSBiKTsKfQoKaW50IG1haW4oKXsKCiAgICBpbnQgcixjOwogICAgcHJpbnRmKCJFbnRlciBSb3cgKFIpIGFuZCBDb2x1bW4gKEMpIDogIik7IC8vVGFraW5nIFJvdyBhbmQgQ29sdW1uIGlucHV0CiAgICBzY2FuZigiJWQlZCIsICZyLCAmYyk7CgogICAgaW50IGFycltyXVtjXTsKCiAgICBwcmludGYoIkVudGVyIGFsbCB0aGUgbnVtYmVyc1xuIik7IC8vIFRha2luZyBhbGwgdGhlIG51bWJlcnMKICAgIGZvcihpbnQgaSA9IDA7IGk8cjsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqPGM7IGorKyl7CiAgICAgICAgICAgIHNjYW5mKCIlZCIsICZhcnJbaV1bal0pOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgbWF4aW11bV9nY2Rbcl07IC8vIHRha2luZyB0aGlzIGFycmF5IHRvIHN0b3JlIHBhaXJ3aXNlIGdjZAogICAgaW50IHRlbXBbKGMqKGMrMSkpLzJdOyAvLyB0YWtpbmcgdGhpcyBhcnJheSB0byBzdG9yZSBhbGwgdGhlIHBvc3NpYmxlIGdjZCBvZiBlYWNoIHJvdwogICAgbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7IC8vIGNsZWFyaW5nIGdhcmJhZ2UgdmFsdWUgb2YgdGVtcCBhcnJheS4KCiAgICBpbnQgaXRyID0gMDsgLy90b29rIHRoaXMgaW50ZWdlciB0byBrZWVwIHRyYWNrIG9mIHRoZSBpbmRleGluZyBpbiB0ZW1wIGFycmF5LgoKICAgIGZvcihpbnQgaSA9IDA7IGk8cjsgaSsrKXsKICAgICAgICBpdHIgPSAwOwogICAgICAgIGZvcihpbnQgaiA9IDA7IGo8Yy0xOyBqKyspewogICAgICAgICAgICBmb3IoaW50IGsgPSBqKzE7IGs8YzsgaysrKXsKICAgICAgICAgICAgICAgIHRlbXBbaXRyKytdID0gZ2NkKGFycltpXVtqXSwgYXJyW2ldW2tdKTsgLy9maW5kaW5nIGFsbCB0aGUgZ2NkJ3MKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgbWF4aSA9IC0xOwogICAgICAgIGZvcihpbnQgcT0gMDsgcTwoYyooYysxKSkvMjsgcSsrKXsgLy8gZmlkbmluZyB0aGUgbWF4aW11bSBnY2QgaW4gdGVtcCBhcnJheQogICAgICAgICAgICBpZihtYXhpPHRlbXBbcV0pewogICAgICAgICAgICAgICAgbWF4aSA9IHRlbXBbcV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbWF4aW11bV9nY2RbaV0gPSBtYXhpOyAvLyBrZWVwaW5nIHRoZSBtYXhpbXVtIGdjZCBpbiB0aGUgYXJyYXkuCiAgICAgICAgbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7IC8vIGFnYWluLCBjbGVhcmluZyBhbGwgdGhlIHZhbHVlcyBvZiB0ZW1wIGZvciBuZXh0IGl0ZXJhdGlvbi4KICAgIH0KCiAgICBmb3IoaW50IGkgPSAwOyBpPHI7IGkrKyl7CiAgICAgICAgcHJpbnRmKCJSb3cgJWQncyBNYXggUGFpcndpc2UgR0NEIDogJWRcbiIsIGkrMSwgbWF4aW11bV9nY2RbaV0pOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==