话不多说,看题解:
A. Windblume Ode(CF1583A)**
**分析:**题意大概是:给一个序列,找一个最大的子序列,使序列的和为合数。首先应该考虑的是原序列本身,若该序列的和为合数则答案显然就是原序列。若和为质数,则和必为奇数(因为n>=3):
注意a是互不相同的,若n个数全为偶数,则合也应该是偶数,矛盾。
于是n个数中有一个奇数,去掉该奇数剩余的数是偶数而且大于2(因为n>=3),因此必存在一个长为n-1的子序列和为合数。
代码:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int a[220];
bool check(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0) return 0;
}
return 1;
}
void solve(){
int n;cin>>n;
int s=0;
for(int i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
}
if(!check(s))
{
cout<<n<<endl;
for(int i=1;i<=n;i++) cout<<i<<" \n"[i==n];
}
else
{
cout<<n-1<<endl;
for(int i=1;i<=n;i++){
if(a[i]%2)
{
for(int j=1;j<=n;j++)
if(j!=i)cout<<j<<" ";
cout<<endl;
return;
}
}
}
}
signed main(){
ios::sync_with_stdio(false)