C# 快速模指数运算 快速求余运算

这篇具有很好参考价值的文章主要介绍了C# 快速模指数运算 快速求余运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此方法解决这样一个问题,就是a^b mod m 的余数是多少。

如果直接计算a^b,方次很大的时候,会溢出,而且时间很长。

当然指数很小的时候直接用自带的Math函数就行,如果指数很大的时候,可以用以下的方法。

原理是利用模运算的分配率:

举例 56 mod 3=(7x8) mod3=(7 mod 3)x(8 mod 3)=1x2=2文章来源地址https://www.toymoban.com/news/detail-784822.html

public static ulong ModPow(ulong baseValue, ulong exponent, ulong modulus)  
    {  
        // 初始化结果为1,因为任何数的0次方都是1  
        ulong result = 1;  
          
        // 底数对模数取模,以防底数过大  
        baseValue %= modulus;  
          
        // 当指数不为0时,继续循环  
        while (exponent > 0)  
        {  
            // 如果当前指数是奇数,将底数乘到结果上,并取模  
            if ((exponent & 1) == 1)  
                result = (result * baseValue) % modulus;  
  
            // 底数平方并取模  
            baseValue = (baseValue * baseValue) % modulus;  
  
            // 指数右移一位(等同于除以2)  
            exponent >>= 1;  
        }  
        // 返回结果  
        return result;  
    } 

到了这里,关于C# 快速模指数运算 快速求余运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [数论第二节]欧拉函数/快速幂/扩展欧几里得算法

    欧拉函数 (varphi(N)) : 1-N中与N互质的数的个数 若 (N = p_1^{a_1} · p_2^{a_2} · p_3^{a_3} ··· ·p_n^{a_n}) 其中p为N的所有质因子 则 (varphi(N) = N(1-frac{1}{p_1})(1-frac{1}{p_2})···(1-frac{1}{p_n})) 证明: 互质:两数的公共因子只有1 去掉所有与N有(大于1的)公共因子的数,剩下的数就是与

    2024年02月14日
    浏览(36)
  • C# 三目运算符

    C# 三目运算符是一种简单的条件语句,也称为条件运算符。它可以根据一个表达式的结果确定另一个表达式的值。三目运算符使用“?”和“:”来表示。 三目运算符的语法如下: 其中,condition 是一个布尔表达式,expression1 和 expression2 是两个可能返回不同类型值的表达式。

    2024年02月15日
    浏览(44)
  • C# 扩展运算符(...)的详细解析

    在C#编程中,扩展运算符(…)是一种非常有用的特性,它可以将一个数组或集合转换成一个可迭代的序列。扩展运算符在C# 7.0及以后的版本中引入,提供了一种简洁的方式来创建数组、列表或集合的实例,尤其是在需要传递多个参数时。本文将详细介绍C#扩展运算符的概念、

    2024年04月22日
    浏览(68)
  • C# 运算符详解:包含算术、赋值、比较、逻辑运算符及 Math 类应用

    运算符用于对变量和值执行操作。在C#中,有多种运算符可用,包括算术运算符、关系运算符、逻辑运算符等。 算术运算符用于执行常见的数学运算: 递增运算符 ++ 用于将变量的值增加 1,而递减运算符 -- 用于将变量的值减少 1: 在实际编码中,请注意避免在表达式中使用

    2024年01月20日
    浏览(53)
  • C#常用运算符的优先级

    运算符在C#编程语言中扮演着重要的角色,用于执行各种计算和操作。了解运算符的优先级是编写高效和正确代码的关键。本文将深入探讨C#中38个常用运算符的优先级划分和理解,并提供详细的说明和示例,以帮助读者更好地理解运算符的使用。 算术运算符用于执行基本的数

    2024年02月05日
    浏览(34)
  • 三、C#—变量,表达式,运算符(3)

    变量名能不能用汉字? 全局变量 局部变量 错误1 错误2 错误3 2.2.1 值类型直接存储值 例如: 2.2.2 简单类型 2.2.3 整数类型 例如: 2.2.4 浮点类型 2.2.5 decimal 类型 注意: 定义decimal变量时的问题 2.2.6 bool类型 2.3.1 引用类型存储对值得引用 2.3.2 Object 类 不区分大小写得限制 2.3.3

    2024年02月09日
    浏览(37)
  • C#学习笔记---异常捕获和变量运算符

    使用异常捕获可以捕获出现异常的代码块,防止因为异常抛出造成的程序卡死的情况发生。 try{}catch{}finally{}结构 算术运算符 算术运算符是英语数值类型变量运算的运算符,运算结果仍旧为数值。 赋值运算符: = 注意:赋值运算符理解将右边数值 赋值给 左边变量。 算术运算

    2024年02月08日
    浏览(35)
  • 蓝桥杯:C++模运算、快速幂

    模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。 模是英文mod的音译,取模实际上是求余。 取模运算一般要求a和m的符号一致,即都为正数或都为负数。如果正

    2024年02月19日
    浏览(25)
  • P1226 【模板】快速幂 | 取余运算

    给你三个整数 a , b , p a,b,p a , b , p ,求 a b   m o d   p a^b bmod p a b mod p 。 输入只有一行三个整数,分别代表 a , b , p a,b,p a , b , p 。 输出一行一个字符串 a^b mod p=s ,其中 a , b , p a,b,p a , b , p 分别为题目给定的值, s s s 为运算结果。 样例输入 #1 样例输出 #1 样例解释 2 10 = 10

    2024年02月13日
    浏览(26)
  • 分部积分法的快速运算:表格法

    用表格法的两种情况:被积函数为①多项式×/三角函数 ②指数函数×三角函数(需要上拐写积分号) 直接用分部积分的情况下: 反对幂三指优先保留下来当作U(x) ,凑多项式为dv  例题:

    2024年02月11日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包