#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
inline int in(){
int x=0,f=1;char c;
c=getchar();
while (c<'0'||c>'9'){
if (c=='-')f=-1;
c=getchar();
}
while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*f;
}
int q,n,k;
bool dp[10005][105];
int main(){
q=in();
while (q--){
memset(dp,0,sizeof dp);
n=in(),k=in();
int x=in();
dp[1][(x%k+k)%k]=dp[1][((-x)%k+k)%k]=1;
for (int i=2;i<=n;i++){
x=in();
for (int j=0;j<k;j++)if (dp[i-1][j])dp[i][((j+x)%k+k)%k]=dp[i][((j-x)%k+k)%k]=1;
}
if (!dp[n][0])printf ("Not divisible");
else puts("Divisible");
}
return 0;
}
算法思路问题不大,但总是 20pts。