---
title: "必要十分条件とは？判定関数と論理式で考える条件の切り分け【基本情報技術者試験】"
description: "必要十分条件を、判定関数と論理式の類題風例から整理し、内側の判定結果が同じになる条件を基本情報技術者試験向けにやさしく解説します。"
last_modified_at: "2026-06-29"
canonical_url: "https://stemtazoo.github.io/fe/necessary-and-sufficient-condition/"
section: "fe"
---

## まず結論

必要十分条件とは、**ある条件が成り立つことと、目的の結果が成り立つことが完全に一致する条件**です。

類題風の例として、関数 `same(X, Y)` は、

```text
X と Y が等しい → 1
X と Y が異なる → 0
```

を返します。

そして、

```text
same(same(A, B), same(B, C)) = 1
```

になるのは、次のどちらかです。

```text
(A = B かつ B = C) 又は (A ≠ B かつ B ≠ C)
```

つまり、**same(A, B) と same(B, C) の結果が同じになる条件**を探す問題です。

## 直感的な説明

この問題は、A、B、C の値そのものを見るというより、次の2つの判定結果を比べています。

```text
A と B は同じか？
B と C は同じか？
```

それぞれの判定結果は、同じなら `1`、違うなら `0` です。

最後に、

```text
same(same(A, B), same(B, C))
```

で、その2つの判定結果が同じかどうかを見ています。

つまり、次のように読むと分かりやすいです。

```text
左の判定結果と右の判定結果が同じなら 1
```

そのため、1が返るのは次の2パターンです。

```text
左も1、右も1
左も0、右も0
```

この2つを条件式に直すと、

```text
(A = B かつ B = C) 又は (A ≠ B かつ B ≠ C)
```

になります。

## 定義・仕組み

まず、`same(X, Y)` の意味を整理します。

| 条件 | same(X, Y) の値 |
|---|---:|
| X = Y | 1 |
| X ≠ Y | 0 |

この類題風の式は、外側にも `same` があるため、内側の結果を先に考えます。

```text
same(same(A, B), same(B, C))
```

内側は次の2つです。

```text
same(A, B)
same(B, C)
```

外側の `same` は、この2つの結果が等しいかを見ます。

つまり、

```text
same(A, B) = same(B, C)
```

であれば、外側の `same` は `1` を返します。

この等しさが成り立つのは、次の2通りです。

| same(A, B) | same(B, C) | 外側のsame |
|---:|---:|---:|
| 1 | 1 | 1 |
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |

上の2行だけが、答えになる条件です。

それぞれを A、B、C の条件に戻すと、

```text
same(A, B) = 1 かつ same(B, C) = 1
→ A = B かつ B = C
```

```text
same(A, B) = 0 かつ same(B, C) = 0
→ A ≠ B かつ B ≠ C
```

したがって、

```text
(A = B かつ B = C) 又は (A ≠ B かつ B ≠ C)
```

が必要十分条件です。

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、必要条件・十分条件・必要十分条件や、論理式の読み取りとして出題されることがあります。

このような問題では、いきなり選択肢を見るより、まず式を小さく分けます。

```text
same(same(A, B), same(B, C))
```

を次のように置き換えると読みやすくなります。

```text
P = same(A, B)
Q = same(B, C)
```

すると、問題は

```text
same(P, Q) = 1
```

になります。

`same(P, Q)` が1になるのは、PとQが等しいときです。

つまり、

```text
P = Q
```

です。

PとQは0か1なので、次の2パターンだけです。

```text
P = 1 かつ Q = 1
P = 0 かつ Q = 0
```

これを元に戻すと、

```text
(A = B かつ B = C) 又は (A ≠ B かつ B ≠ C)
```

になります。

試験中は、次の順で見ると迷いにくいです。

```text
1. 内側の関数を P, Q と置く
2. 外側の same は「P と Q が等しいか」と読む
3. P と Q が両方1、または両方0になる条件を探す
```

## 科目Bでどう使う？

科目Bでは、条件式や関数の戻り値を追う場面があります。

この問題の考え方は、擬似言語で関数呼び出しが入れ子になっているときにも役立ちます。

例えば、

```text
same(same(A, B), same(B, C))
```

のように関数が入れ子になっている場合は、外側から読まずに、内側から順番に処理します。

```text
1. same(A, B) を計算する
2. same(B, C) を計算する
3. その2つの結果を same で比較する
```

科目Bでは、途中結果を表にすると安全です。

| AとB | BとC | same(A,B) | same(B,C) | 外側のsame |
|---|---|---:|---:|---:|
| 等しい | 等しい | 1 | 1 | 1 |
| 異なる | 異なる | 0 | 0 | 1 |
| 等しい | 異なる | 1 | 0 | 0 |
| 異なる | 等しい | 0 | 1 | 0 |

このように、**戻り値を一度0か1に変換してから考える**と、複雑な式でも追いやすくなります。

## よくある誤解・混同

一番多い誤解は、外側の `same` を見落としてしまうことです。

内側だけを見ると、

```text
same(A, B)
same(B, C)
```

なので、つい

```text
A = B かつ B = C
```

だけを選びたくなります。

しかし、外側の `same` は、内側の2つの結果が等しいかを見ています。

そのため、

```text
same(A, B) = 0
same(B, C) = 0
```

のときも、外側の `same` は1を返します。

つまり、

```text
A ≠ B かつ B ≠ C
```

も含める必要があります。

もう一つの注意点は、**十分条件と必要十分条件の違い**です。

例えば、

```text
A = B かつ B = C
```

なら、たしかに外側の `same` は1になります。

しかし、それだけではすべての場合を表せていません。

```text
A ≠ B かつ B ≠ C
```

でも、外側の `same` は1になります。

したがって、`A = B かつ B = C` だけでは十分条件ではあっても、必要十分条件ではありません。

必要十分条件を選ぶときは、

```text
その条件なら必ず成り立つか
成り立つ場合をすべて含んでいるか
```

の両方を見ることが大切です。

## まとめ（試験直前用）

- `same(X, Y)` は、XとYが等しければ1、異なれば0
- 入れ子の関数は、内側から順番に計算する
- `same(same(A, B), same(B, C)) = 1` は、2つのsameの結果が同じという意味
- 必要十分条件は `(A = B かつ B = C) 又は (A ≠ B かつ B ≠ C)` のように、成立する場合を過不足なく表す
- 必要十分条件は「成り立つ場合をすべて含む」ことが大切
