样例输入1
1 2 3 4
样例输出1
2
样例输入2
6 1 10 8
样例输出2
7
样例输出3
9 9 6 12
样例输出4
impossible
思想
这道题要分类讨论
有可能4个数每个数都是素数,那么我们就要输出其中最小的一个素数.
有可能每个数都不是素数,但是相加和却是素数.
而这又分为好几种情况:
一组(两个数)相加和为素数
三个数相加和为素数
四个数相加和为素数
我们都要取一个min
code
#include<bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f
using namespace std;
bool isprime(int x) {
if (x < 2) return false;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) return false;
}
return true;
}
int ans = INF, sum;
signed main() {
int a[10];
for (int i = 0; i < 4; i++)cin >> a[i];
sum = a[0] + a[1] + a[2] + a[3];
sort(a, a + 4);
//单个素数的情况
for (int i = 0; i < 4; i++)
if (isprime(a[i]))
ans = min(ans, a[i]);
//两个素数的情况
for (int i = 0; i < 4; i++)
for (int j = i + 1; j < 4; j++)
if (isprime(a[i] + a[j]))
ans = min(ans, a[i] + a[j]);
//三个素数的情况
for (int i = 0; i < 4; i++)
if (isprime(sum - a[i]))
ans = min(ans, sum - a[i]);
//四个素数的情况
if (isprime(a[0] + a[1] + a[2] + a[3])) {
ans = min(ans, a[0] + a[1] + a[2] + a[3]);
}
if (ans == INF) cout << "impossible" << endl;
else cout << ans << endl;
return 0;
}