結果
| 問題 | No.2207 pCr検査 | 
| コンテスト | |
| ユーザー |  zaichu | 
| 提出日時 | 2023-02-05 10:50:32 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,328 bytes | 
| コンパイル時間 | 14,884 ms | 
| コンパイル使用メモリ | 387,996 KB | 
| 実行使用メモリ | 6,948 KB | 
| 最終ジャッジ日時 | 2024-07-04 01:46:52 | 
| 合計ジャッジ時間 | 22,125 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | WA * 2 | 
| other | WA * 30 | 
ソースコード
use std::collections::HashMap;
fn factorial(n: usize) -> usize {
    (1..=n).product()
}
fn binomial_coefficient(p: usize, r: usize) -> usize {
    factorial(p) / (factorial(r) * factorial(p - r))
}
fn prime_factors(n: usize, factors: &mut HashMap<usize, usize>) {
    let mut n = n;
    let mut i = 2;
    while i * i <= n {
        while n % i == 0 {
            *factors.entry(i).or_default() += 1;
            n /= i;
        }
        i += 1;
    }
    if n > 1 {
        *factors.entry(n).or_default() += 1;
    }
}
fn is_binomial_coefficient_possible(p: usize, r: usize, n: usize) -> bool {
    let mut factors = HashMap::new();
    for i in r + 1..=p {
        prime_factors(i, &mut factors);
    }
    for i in 2..=p - r {
        prime_factors(i, &mut factors);
    }
    for (&prime, &count) in &factors {
        if count > n / prime {
            return false;
        }
    }
    true
}
fn main() {
    let n = 10;
    let mut found = false;
    for p in 2.. {
        for r in 0..=p {
            if binomial_coefficient(p, r) == n {
                if is_binomial_coefficient_possible(p, r, n) {
                    println!("p: {}, r: {}", p, r);
                    found = true;
                    break;
                }
            }
        }
        if found {
            break;
        }
    }
}
            
            
            
        