博客
关于我
牛牛和牛可乐的赌约
阅读量:119 次
发布时间:2019-02-27

本文共 1145 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要计算牛牛投掷骰子时输的概率。牛牛投掷m次n面的骰子,每次投掷都必须出现n点,才能赢。输的概率是至少有一次投掷不是n点。我们可以通过快速幂和模逆元来高效地计算这个概率。

方法思路

  • 问题分析:输的概率是1减去赢的概率。赢的概率是每次投掷都成功的概率,即(1/n)^m。因此,输的概率为1 - (1/n)^m。
  • 快速幂计算:使用快速幂算法来计算大数的幂取模。
  • 模逆元计算:使用费马小定理来计算模逆元,因为1e9+7是一个质数。
  • 计算步骤
    • 计算n的逆元。
    • 计算逆元的m次幂。
    • 计算输的概率,并调整负数情况。
  • 解决代码

    #include 
    using namespace std;typedef long long ll;const int MOD = 1e9 + 7;ll poww(ll a, ll b, int mod) { ll ans = 1; ll base = a; while (b) { if (b & 1) ans = (ans * base) % mod; base = (base * base) % mod; b >>= 1; } return ans;}ll inv(ll a, int mod) { return poww(a, mod - 2, mod);}int main() { ll t; read(t); for (int _ = 0; _ < t; ++_) { ll n, m; n = read(); m = read(); if (n == 1) { cout << 0 << endl; continue; } ll inv_n = inv(n, MOD); ll inv_pow = poww(inv_n, m, MOD); ll res = (1 - inv_pow + MOD) % MOD; cout << res << endl; }}

    代码解释

  • 快速幂函数poww用于快速计算大数的幂取模,适用于处理大指数问题。
  • 模逆元函数inv使用费马小定理计算模逆元,适用于质数模数。
  • 主函数:读取输入数据,处理每个测试用例,计算逆元和幂,最后输出结果。
  • 特殊情况处理:当n=1时,直接输出0,因为每次投掷都只能得到1点,无法输。
  • 通过这种方法,我们可以高效地计算牛牛输的概率,并在大数情况下快速得到结果。

    转载地址:http://ywzb.baihongyu.com/

    你可能感兴趣的文章
    MySQL数据库的高可用
    查看>>
    Mysql数据库相关各种类型的文件
    查看>>
    MYSQL数据库简单的状态检查(show processlist)
    查看>>
    MYSQL数据库简单的状态检查(show status)
    查看>>
    MySQL数据库系列
    查看>>
    MYSQL数据库自动本地/异地双备份/MYSQL增量备份
    查看>>
    mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
    查看>>
    MySQL数据库被黑了
    查看>>
    mysql数据库设计
    查看>>
    MySQL数据库设计与开发规范
    查看>>
    MYSQL数据库进阶操作
    查看>>
    MySQL数据库配置文件调优详解
    查看>>
    MySQL数据库酒店客房管理系统(含MySQL源码) 结课作业 做的不是很好
    查看>>
    mysql数据库里的一些坑(读高性能mysql有感)
    查看>>
    MySQL数据库面试题(2021最新版)
    查看>>
    MySQL数据库高并发优化配置
    查看>>
    mysql数据恢复
    查看>>
    MySQL数据的主从复制、半同步复制和主主复制详解
    查看>>
    mysql数据碎片整理
    查看>>
    MySQL数据类型
    查看>>