博客
关于我
牛牛和牛可乐的赌约
阅读量: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中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>
    MySql中怎样使用case-when实现判断查询结果返回
    查看>>
    Mysql中怎样使用update更新某列的数据减去指定值
    查看>>
    Mysql中怎样设置指定ip远程访问连接
    查看>>
    mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
    查看>>
    Mysql中文乱码问题完美解决方案
    查看>>
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>
    mysql中的collate关键字是什么意思?
    查看>>
    MySql中的concat()相关函数
    查看>>
    mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
    查看>>
    MySQL中的count函数
    查看>>
    MySQL中的DB、DBMS、SQL
    查看>>
    MySQL中的DECIMAL类型:MYSQL_TYPE_DECIMAL与MYSQL_TYPE_NEWDECIMAL详解
    查看>>
    MySQL中的GROUP_CONCAT()函数详解与实战应用
    查看>>
    MySQL中的IO问题分析与优化
    查看>>