#include <stdio.h>
#include <math.h>
// 팩토리얼 계산 함수
unsigned long long factorial(int num) {
if (num == 0 || num == 1) return 1;
unsigned long long result = 1;
for (int i = 2; i <= num; i++) {
result *= i;
}
return result;
}
// 이항 계수 계산 함수
unsigned long long binomial_coefficient(int n, int k) {
if (k > n) return 0;
return factorial(n) / (factorial(k) * factorial(n - k));
}
// 이항 분포 확률 계산 함수
double binomial_probability(int n, int k, double p) {
double coefficient = binomial_coefficient(n, k);
return coefficient
* pow(p
, k
) * pow(1 - p
, n
- k
); }
// m개 이상 성공할 확률 계산 함수
double probability_at_least_m(int n, int m, double p) {
double probability = 0.0;
for (int k = m; k <= n; k++) {
probability += binomial_probability(n, k, p);
}
return probability;
}
int main() {
int n; // 뽑기 횟수
double p; // 뽑기 확률
int m; // 최소 성공 횟수
// 사용자 입력
printf("성공 확률(p)을 입력하세요 (0과 1 사이의 값): "); printf("최소 성공 횟수(m)를 입력하세요: ");
// 입력값 유효성 검사
if (n < 0 || p < 0.0 || p > 1.0 || m < 0 || m > n) {
printf("잘못된 입력입니다. 뽑기 횟수는 0 이상의 정수여야 하고, 성공 확률은 0과 1 사이의 값이어야 하며, 최소 성공 횟수는 0에서 뽑기 횟수 사이여야 합니다.\n"); return 1;
}
// m개 이상 성공할 확률 계산 및 출력
double probability = probability_at_least_m(n, m, p);
printf("%d번 뽑기에서 %d개 이상 성공할 확률: %.4f\n", n
, m
, probability
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyDtjKnthqDrpqzslrwg6rOE7IKwIO2VqOyImAp1bnNpZ25lZCBsb25nIGxvbmcgZmFjdG9yaWFsKGludCBudW0pIHsKICAgIGlmIChudW0gPT0gMCB8fCBudW0gPT0gMSkgcmV0dXJuIDE7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gMTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG51bTsgaSsrKSB7CiAgICAgICAgcmVzdWx0ICo9IGk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgovLyDsnbTtla0g6rOE7IiYIOqzhOyCsCDtlajsiJgKdW5zaWduZWQgbG9uZyBsb25nIGJpbm9taWFsX2NvZWZmaWNpZW50KGludCBuLCBpbnQgaykgewogICAgaWYgKGsgPiBuKSByZXR1cm4gMDsKICAgIHJldHVybiBmYWN0b3JpYWwobikgLyAoZmFjdG9yaWFsKGspICogZmFjdG9yaWFsKG4gLSBrKSk7Cn0KCi8vIOydtO2VrSDrtoTtj6wg7ZmV66WgIOqzhOyCsCDtlajsiJgKZG91YmxlIGJpbm9taWFsX3Byb2JhYmlsaXR5KGludCBuLCBpbnQgaywgZG91YmxlIHApIHsKICAgIGRvdWJsZSBjb2VmZmljaWVudCA9IGJpbm9taWFsX2NvZWZmaWNpZW50KG4sIGspOwogICAgcmV0dXJuIGNvZWZmaWNpZW50ICogcG93KHAsIGspICogcG93KDEgLSBwLCBuIC0gayk7Cn0KCi8vIG3qsJwg7J207IOBIOyEseqzte2VoCDtmZXrpaAg6rOE7IKwIO2VqOyImApkb3VibGUgcHJvYmFiaWxpdHlfYXRfbGVhc3RfbShpbnQgbiwgaW50IG0sIGRvdWJsZSBwKSB7CiAgICBkb3VibGUgcHJvYmFiaWxpdHkgPSAwLjA7CiAgICBmb3IgKGludCBrID0gbTsgayA8PSBuOyBrKyspIHsKICAgICAgICBwcm9iYWJpbGl0eSArPSBiaW5vbWlhbF9wcm9iYWJpbGl0eShuLCBrLCBwKTsKICAgIH0KICAgIHJldHVybiBwcm9iYWJpbGl0eTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsgLy8g672R6riwIO2an+yImAogICAgZG91YmxlIHA7IC8vIOu9keq4sCDtmZXrpaAKICAgIGludCBtOyAvLyDstZzshowg7ISx6rO1IO2an+yImAoKICAgIC8vIOyCrOyaqeyekCDsnoXroKUKICAgIHByaW50Zigi672R6riwIO2an+yImChuKeulvCDsnoXroKXtlZjshLjsmpQ6ICIpOwogICAgc2NhbmYoIiVkIiwgJm4pOwogICAgcHJpbnRmKCLshLHqs7Ug7ZmV66WgKHAp7J2EIOyeheugpe2VmOyEuOyalCAoMOqzvCAxIOyCrOydtOydmCDqsJIpOiAiKTsKICAgIHNjYW5mKCIlbGYiLCAmcCk7CiAgICBwcmludGYoIuy1nOyGjCDshLHqs7Ug7Zqf7IiYKG0p66W8IOyeheugpe2VmOyEuOyalDogIik7CiAgICBzY2FuZigiJWQiLCAmbSk7CgogICAgLy8g7J6F66Cl6rCSIOycoO2aqOyEsSDqsoDsgqwKICAgIGlmIChuIDwgMCB8fCBwIDwgMC4wIHx8IHAgPiAxLjAgfHwgbSA8IDAgfHwgbSA+IG4pIHsKICAgICAgICBwcmludGYoIuyemOuqu+uQnCDsnoXroKXsnoXri4jri6QuIOu9keq4sCDtmp/siJjripQgMCDsnbTsg4HsnZgg7KCV7IiY7Jes7JW8IO2VmOqzoCwg7ISx6rO1IO2ZleuloOydgCAw6rO8IDEg7IKs7J207J2YIOqwkuydtOyWtOyVvCDtlZjrqbAsIOy1nOyGjCDshLHqs7Ug7Zqf7IiY64qUIDDsl5DshJwg672R6riwIO2an+yImCDsgqzsnbTsl6zslbwg7ZWp64uI64ukLlxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gbeqwnCDsnbTsg4Eg7ISx6rO17ZWgIO2ZleuloCDqs4TsgrAg67CPIOy2nOugpQogICAgZG91YmxlIHByb2JhYmlsaXR5ID0gcHJvYmFiaWxpdHlfYXRfbGVhc3RfbShuLCBtLCBwKTsKICAgIHByaW50ZigiJWTrsogg672R6riw7JeQ7IScICVk6rCcIOydtOyDgSDshLHqs7XtlaAg7ZmV66WgOiAlLjRmXG4iLCBuLCBtLCBwcm9iYWJpbGl0eSk7CgogICAgcmV0dXJuIDA7Cn0K