题意: 解法: 对于数x,如果x>=10*d,那么一定有解, 证明: 将x对10*d取模,分出若干个10*d之后,设余数为p, 接着将p为d取模,显然此时余数<10,将这个余数与之前的某个10*d组合即可. 当x<10*d时, 那么拆除的数的个位一定是d, 那么拆出的可以表示为(10*k+d)+d+d+d...... 枚举k判断(x-10*k)%d==0是否有解即可. code: #include <bits/stdc++.h> #define int long long using namespace std; const int maxm=1e6+5; int a[maxm]; int n,d; inline void solve(){ cin>>n>>d; for(int i=1;i<=n;i++){ int x;cin>>x; int ok=1; if(x<10*d){ int f=0; for(int k=0;x>10*k;k++){ if((x-10*k)%d==0){ f=1;break; } } if(!f)ok=0; } if(ok)cout<<"YES"<<endl; else cout<<"NO"<<endl; } } signed main(){ ios::sync_with_stdio(0);cin.tie(0); int T;cin>>T;while(T--) solve(); return 0; }