From 056e2f1fdb0b8a385099744bb8d2687f5733fb30 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Fri, 18 Jul 2025 21:39:56 +0800 Subject: [PATCH] feat: add birthday paradox --- README.md | 2 +- .../java/me/hatter/math/BirthdayParadox.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/hatter/math/BirthdayParadox.java diff --git a/README.md b/README.md index b5ce663..b3c0ecc 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ | Sqrt10 | 求 $\sqrt{10}$【连分数】 | [resolve-sqrt-10](https://hatter.ink/static/resource/muboard/?id=resolve-sqrt-10&version=latest&full=1) | | WallisProduct | 沃里斯乘积 | [wallis-product](https://hatter.ink/static/resource/muboard/?id=wallis-product&version=latest&full=1) | | EulerNumber | 欧拉数 | [eulers-number](https://hatter.ink/static/resource/muboard/?id=eulers-number&version=latest&full=1) | - +| BirthdayParadox | 生日悖论 | [birthday-paradox](https://hatter.ink/static/resource/muboard/?id=birthday-paradox&version=latest&full=1) | diff --git a/src/main/java/me/hatter/math/BirthdayParadox.java b/src/main/java/me/hatter/math/BirthdayParadox.java new file mode 100644 index 0000000..69dc806 --- /dev/null +++ b/src/main/java/me/hatter/math/BirthdayParadox.java @@ -0,0 +1,29 @@ +package me.hatter.math; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +public class BirthdayParadox { + + public static void main(String[] args) { + System.out.println(p(1)); + System.out.println(p(10)); + System.out.println(p(20)); + System.out.println(p(23)); + System.out.println(p(30)); + System.out.println(p(40)); + System.out.println(p(50)); + System.out.println(p(60)); + } + + public static BigDecimal p(int n) { + BigDecimal p = BigDecimal.ONE; + for (int i = 1; i < n; i++) { + p = p.multiply(BigDecimal.ONE.subtract(BigDecimal.valueOf(i).divide(BigDecimal.valueOf(365), 100, RoundingMode.FLOOR))); + } + if (!p.equals(BigDecimal.ONE)) { + p = p.divide(BigDecimal.ONE, 100, RoundingMode.FLOOR); + } + return BigDecimal.ONE.subtract(p); + } +}