Algorithm 算法。如何在数组中找到最长的整数子序列,使序列中任意两个连续数的gcd大于1?

Algorithm 算法。如何在数组中找到最长的整数子序列,使序列中任意两个连续数的gcd大于1?,algorithm,optimization,Algorithm,Optimization,给定一个整数数组。我们必须找到整数的最长子序列的长度,使得序列中任意两个连续元素的gcd大于1 例如:if数组=[12,8,2,3,6,9] 那么一个这样的子序列可以是={12,8,2,6,9} 另一个可以是={12,3,6,9} 我试图用动态规划来解决这个问题。假设maxCount是数组,这样maxCount[i]将具有这样最长子序列的长度 以指数i结束 `maxCount[0]=1 ; for(i=1; i<N; i++) { max = 1 ; for(j=i-1;

给定一个整数数组。我们必须找到整数的最长子序列的长度,使得序列中任意两个连续元素的gcd大于1

例如:if数组=[12,8,2,3,6,9]

那么一个这样的子序列可以是={12,8,2,6,9} 另一个可以是={12,3,6,9}

我试图用动态规划来解决这个问题。假设maxCount是数组,这样maxCount[i]将具有这样最长子序列的长度 以指数i结束

`maxCount[0]=1 ;

for(i=1; i<N; i++)
{

   max = 1 ;

   for(j=i-1; j>=0; j--)
   {   

      if(gcd(arr[i], arr[j]) > 1)
      {
      temp = maxCount[j] + 1 ;

      if(temp > max)
       max = temp ;
     }
    }

maxCount[i]=max;
`maxCount[0]=1;
对于(i=1;i=0;j--)
{   
如果(gcd(arr[i],arr[j])>1)
{
温度=最大计数[j]+1;
如果(温度>最大值)
最大值=温度;
}
}
最大计数[i]=最大值;
}``

max=0;
对于(i=0;i最大值)
max=maxCount[i];
}
cout条件“gcd大于1”意味着数字至少有一个公约数。因此,让
dp[i]
等于在可被
i
整除的数字上完成的最长序列的长度

intn;
cin>>n;
常量int MAX_NUM=100*1000;
静态整数dp[MAX_NUM];
对于(int i=0;i>x;
int cur=1;
载体d;
对于(int i=2;i*i 1)
{
cur=最大值(cur,dp[x]+1);
d、 推回(x);
}
for(int j:d)
{
dp[j]=cur;
}
}
库特
max = 0;

for(i=0; i<N; i++)
{
 if(maxCount[i] > max)
   max = maxCount[i] ;
}

cout<<max<<endl ;