一个长度大于等于2的数列,且其中任
意两个元素Ai和Aj(i≠j)的和Ai+Aj都能整除K,我们称其为K型好数列。
现在输入一个长度为N的数列A=[A1,A2,...AN]以及一个整数K,请你找出A的最长的K型好数列B,输出B的长度。
如果这样的子数组不存在,输出-1.
输入格式
第一行包含两个整数N和K.
第二行包含N个整数A1,A2,...AN.
1≤N≤100000
1≤Ai, K≤1000000000
输出格式
一个整数,表示答案。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,k;
int A[100000];
int temp[100000],len=0,max_len=-1;
scanf("%d %d",&n,&k);
for(int i=0;i<n;++i)
{
scanf("%d",&A[i]);
}
for(int i=0;i<n-1;++i)
{
int j=i+1;
for(j=i+1;j<n;++j)
{
if(k%(A[i]+A[j])==0)
{
temp[len++]=A[i];
temp[len++]=A[j];
break;
}
}
for(int q=0;q<n;++q)
{
if(q==i || q==j)
continue;
int p=0;
for(p=0;p<len;++p)
{
if(k%(temp[p]+A[q])!=0)
break;
}
if(p>=len)
{
temp[len++]=A[q];
}
}
if(len>0 && len>max_len)
{
max_len = len;
}
}
printf("%d",max_len);
return 0;
}