Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Nhật ký sinh nhật (Birthday Paradox) trong C++


Birthday Paradox (Nhật ký sinh nhật) là bài toán xác suất nổi tiếng: trong một nhóm người, xác suất ít nhất 2 người cùng ngày sinh (bỏ qua năm nhuận) cao hơn dự cảm.

Xác suất mọi người **khác** ngày sinh: P(khác) = 1 × (1-1/365) × (1-2/365) × ... × (1-(n-1)/365).
Xác suất **cùng** ngày sinh: P(cùng) = 1 - P(khác).

Công thức xấp xỉ số người n để P(cùng) ≥ p:
n ≈ √(2 × 365 × ln(1/(1-p))).

Ví dụ

Với p = 0.70 → n ≈ √(2×365×ln(1/0.3)) ≈ 30 người.

Ví dụ mã nguồn

#include <bits/stdc++.h>
using namespace std;

int findPeople(double p) {
    return ceil(sqrt(2 * 365 * log(1/(1-p))));
}

int main() {
    cout << findPeople(0.70); // 30
    return 0;
}

Kết quả

30

Cần khoảng 30 người để xác suất trùng ngày sinh ≥ 70%.