思路:直接模拟吧,首先排序,因为模最大的符合(比如2,3,6)然后遍历b,去模其他的所有数,直到为0,标记退出,否则继续遍历b,循环操作。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#define INF 999999999
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int solve(int a,int b[],int n)
{
int ss=INF;
int flag;
for(int i=1; i<=n; i++)
{
int temp=a;
flag = 0;
for(int j=i; j<=n; j++,flag++)
if(temp==0) break;
else
temp=temp%b[j];
if(temp==0)
ss=min(ss,flag);
}
return ss==INF?-1:ss;
}
int main()
{
int T;
int n,a;
int b[21];
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&a);
for(int i=1; i<=n; i++)
scanf("%d",&b[i]);
sort(b+1,b+n+1,cmp);
//for(int i=1; i<=n; i++)
// printf("%d",b[i]);
printf("%d\n",solve(a,b,n));
}
return 0;
}