由题意k可取2、3、4、5 这四个值,其中2、3、5是素数,一个素数的倍数可以是任意一个数和他的倍数的乘积。
而4的倍数可以是任意一个数和他的倍数的乘积,也可以是两个2的倍数的乘积,要判断这两种情况那种最优。
k==4
1.数组中2的倍数大于等于两个,那么不用变动,输出0
2.数组中有四的倍数,输出0
3.数组中有一个2的倍数,那么其他数一定是奇数,把任意一个数加一变成偶数即可,输出1
4.数组中没有2的倍数,那么所有数都是奇数,需要把任意两个奇数变成偶数即可,输出2
#include<bits/stdc++.h>
using namespace std;
const int M=2e5+5;
int a[M];
int main(){
int t; cin>>t;
while(t--){
int n,k; cin>>n>>k;
int minn=20;
int f=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]%k==0){
f=1;
}
minn=min(minn,k-(a[i]%k));
}
if(f) {
cout<<"0"<<endl;
continue;
}
if(k!=4){
cout<<minn<<endl;
}
else{
int cnt=0;
f=0;
for(int i=1;i<=n;i++){
if(a[i]%2==0){
cnt++;
}
if(a[i]==3||a[i]==7){
f=1;
}
}
if(cnt==1) {
cout<<"1"<<endl;
continue;
}
if(cnt>=2){
cout<<"0"<<endl;
continue;
}
if(f) {
cout<<"1"<<endl;
continue;
}
if(cnt==0&&!f) cout<<"2"<<endl;
}
}
return 0;
}