int main(){
cin>>n>>m;
int nD=0;
for(int i=1;i<=m;i++){
if(m%i)continue;
d[++nD]=i;
idx[i]=nD;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin>>board[i][j];
if(board[i][j]<0) continue;
int g=__gcd(board[i][j],m);
board[i][j]=idx[g];
}
}
for(int i=1;i<=nD;i++){
for(int j=1;i<=nD;j++){
int g=__gcd((long long)d[i]*d[j],(long long)m);
p[i][j]=idx[g];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(board[i][j]==-1)continue;
for(int k=1;k<=nD;k++){
if(board[i][j-1]<0&&board[i-1][j]<0)continue;
for(int l=1;l<=k&&d[k]%d[l]==0&&board[i][j]%d[l]==0;l++)
if(board[i][j-1]<0)dp[i][j][k]=dp[i-1][j][l];
else if(board[i-1][j]<0)dp[i][j][k]=dp[i][j-1][l];
else dp[i][j][k]=dp[i][j-1][l]+dp[i-1][j][l];
}
}
}
return 0;
}
主函数在这里,哪怕n,m是0也会RE。 变量:
int n,m,board[505][505],ans,d[1005],idx[1005],p[505][505];