Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- char c[1001][1001], dp[1001][1001];
- int a[1001][1001];
- void solve() {
- int n, m;
- cin >> n >> m;
- for (int i = 1; i <= n; i++){
- for (int j = 1; j <= m; j++)
- cin >> a[i][j];
- }
- vector <int> vec;
- for (int i = 1; i * i <= a[1][1]; i++){
- if (a[1][1] % i == 0){
- vec.push_back(i);
- if (i * i != a[1][1]){
- vec.push_back(a[1][1] / i);
- }
- }
- }
- sort(vec.begin(), vec.end());
- reverse(vec.begin(), vec.end());
- for (int div : vec){
- for (int i = 1; i <= n; i++){
- for (int j = 1; j <= m; j++){
- if (a[i][j] % div == 0){
- c[i][j] = 1;
- }
- else{
- c[i][j] = 0;
- }
- }
- }
- dp[1][1] = 1;
- for (int i = 1; i <= n; i++){
- for (int j = 1; j <= m; j++){
- if (i == 1 && j == 1){
- continue;
- }
- dp[i][j] = 0;
- if (c[i][j] == 0){
- continue;
- }
- if (i > 1){
- dp[i][j] = max(dp[i][j], dp[i - 1][j]);
- }
- if (j > 1){
- dp[i][j] = max(dp[i][j], dp[i][j - 1]);
- }
- }
- }
- if (dp[n][m] == 1){
- cout << div << '\n';
- return;
- }
- }
- }
- int main() {
- int t;
- cin >> t;
- while (t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment