第51行f[0][0]=0不加就过不了,调试的时候有的数据会影响f[0][0]的值,可是前面又没用到f数组,f[0][0]的值为什么会变?
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define LL long long
const int maxn=2e3+10;
struct prf {
int x,sum=0;
};
prf pd[3];
int q;
int pr[maxn][3];
LL f[maxn][maxn];
void prime(int k) {
for(int i=2; i<=k; i++) {
if(k%i==0) {
pd[++q].x=i;
while(k%i==0) {
pd[q].sum++;
k/=i;
}
}
}
return ;
}
bool F(int i,int j) {
int d=min(i,j);
for(int t=1; t<=q; t++) {
if(pr[i][t]-pr[d][t]-pr[i-d][t]<pd[t].sum) {
return 0;
}
}
return 1;
}
int main() {
int t,k;
cin>>t>>k;
prime(k);
for(int i=1; i<=maxn; i++) {
for(int j=1; j<=q; j++) {
if(i%pd[j].x==0) {
pr[i][j]=pr[i/pd[j].x][j]+1;
}
}
}
for(int i=1; i<=maxn; i++) {
for(int j=1; j<=q; j++) {
pr[i][j]+=pr[i-1][j];
}
}
f[0][0]=0;
for(int i=1; i<maxn; i++) {
for(int j=1; j<maxn; j++) {
f[i][j]=F(i,j)+f[i-1][j]+f[i][j-1]-f[i-1][j-1];
}
}
while(t--){
int n,m;
cin>>n>>m;
cout<<f[n][m]<<endl;
}
return 0;
}