注意点:
- gcd(d1,d2,d3,...,dn-1,n)=1则可以在n次跳跃后完成任务.
#include<cstdio> #include<iostream> using namespace std; const int MAXN=2e7; bool vis[MAXN]; int gcd(int a,int b){ if(!b)return a; return gcd(b,a%b); } int a[MAXN]; int main(){ int t; scanf("%d",&t); while(t--){ int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=k;i++){ scanf("%d",&a[i]); vis[a[i]]=1; } if(n==1&&k==1){ printf("-1\n"); vis[a[1]]=0; continue; } int gcdValue=n; for(int i=1;i<=n;i++){ if(!vis[i]){ gcdValue=gcd(gcdValue,i); } } for(int i=1;i<=k;i++) vis[a[i]]=0; if(gcdValue==1){ printf("%d\n",n); }else printf("-1\n"); } return 0; }