(四) 必要条件、充分条件与等价条件
必要条件是“答案成立时一定满足”,但满足它还不一定有答案。充分条件是“满足它就可以保证答案成立”。两者同时成立,才能把原题要求等价替换成这个判断。
例:正整数 a + b 是偶数,说明 a、b 同奇偶;但如果要求 a、b 都是正偶数,只检查总和为偶数还不够,因为 1 + 3 = 4 是反例。
1. 完整示例:分成两个正偶数
题目原文(自拟): 给定整数 weight,判断能否写成两个正偶数之和。只输出 YES 或 NO。输入范围为 1 <= weight <= 1000000000。
分析推导:
- 两个偶数之和一定是偶数,所以
weight % 2 == 0是必要条件。 - 两个正偶数各至少为
2,所以weight >= 4也是必要条件。 - 反过来,如果
weight为偶数且至少为4,可以选2和weight - 2;两者都是正偶数,因此两个条件合起来也是充分条件。
所以原要求等价于:
\[ weight\ge4\quad\land\quad weight\bmod2=0 \]
#include <iostream>
using namespace std;
int main() {
int weight;
cin >> weight;
// 两个正偶数的和至少为 4;偶数 weight 可拆成 2 与 weight-2。
bool possible = weight >= 4 && weight % 2 == 0;
cout << (possible ? "YES" : "NO") << '\n';
}输入 2 输出 NO,输入 8 输出 YES,输入 9 输出 NO。
代码解释: 程序只计算一个已经证明充要的条件。时间、额外空间均为 \(O(1)\);不需要枚举两个数。
练习: CF 4A — Watermelon。