当前位置: 首页 > news >正文

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

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

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

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

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

举例 56 mod 3=(7x8) mod3=(7 mod 3)x(8 mod 3)=1x2=2

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;  } 
http://www.lryc.cn/news/281031.html

相关文章:

  • Chisel入门初步0
  • MySQL 8.0中移除的功能(一)
  • 可抓取性和可索引性:它们是什么以及如何影响搜索引擎优化
  • Django教程第4章 | Web开发实战-三种验证码实现
  • 深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
  • VUE指令(二)
  • 开源对象存储服务器MinIO本地部署并结合内网穿透实现远程访问管理界面
  • 【TypeScript】tsconfig.json文件到底是干啥的?作用是什么?
  • wagtail的数据模型和渲染
  • OpenHarmony4.0适配LVDS屏幕驱动
  • 【playwright】新一代自动化测试神器playwright+python系列课程01-playwright驱动浏览器
  • POSIX API与网络协议栈
  • 互联网加竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像
  • 腾讯云 IPv6 解决方案
  • Appium 自动化测试
  • 深入浅出Android dmabuf_dump工具
  • Guava RateLimiter预热模型
  • 【搭建个人知识库-3】
  • 如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C++
  • springboot网关添加swagger
  • 代码随想录 Leetcode383. 赎金信
  • 上下左右视频转场模板PR项目工程文件 Vol. 05
  • 【正点原子STM32连载】第三十三章 单通道ADC采集实验 摘自【正点原子】APM32E103最小系统板使用指南
  • Linux系统使用docker部署Geoserver(简单粗暴,复制即用)
  • libcurl使用默认编译的winssl进行https的双向认证
  • MySQL运维实战(3.3) 管理数据库(database)
  • Web3去中心化存储:重新定义云服务
  • 纸尿裤行业调研:预计到2024年提高至68.1%
  • 目标检测数据集 - 行人检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 重磅!巨匠纺品鉴正式签约“体坛冠军程晨”为品牌形象代言人