(暴力+减枝):
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[105][105],sum=0,l[205][205],minn=0x3f;
bool z[105][105];
int cheak(int x,int y) {
if(z[x][y])return -2;
if(sum%(x*y)!=0)return -1;
memset(l,0x3f,sizeof l);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)l[i][j]=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
if(a[i][j]-l[i][j]!=0) {
for(int o=i; o<=i+x-1; o++) {
for(int p=j; p<=j+y-1; p++) {
if(a[i][j]-l[i][j]==0)return -1;
}
}
}
}
return sum/x/y;
}
signed main() {
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)cin>>a[i][j],sum+=a[i][j];
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
int a=cheak(i,j);
if(a==-1) {
for(int o=2; o*i<=n; o++) {
for(int p=1; p*j<=m; p++) {
z[o*i][p*j]=true;
}
}
} else if(a!=-2) minn=min(minn,a);
}
cout<<minn;
return 0;
}