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

算法-同余原理

    在计算n个数相加或者相乘再取余时,中间结果可能会溢出导致结果错误,这时可以使用同余原理

一、同余原理

①加法同余

 (a[1] + a[2] + ... + a[n])% m  ==>   (a[1] % m + a[2] % m + ... + a[n] % m)  % m

② 乘法同余

(a[1] x a[2] x ... x a[n])% m  ==>   ((a[1] % m) x (a[2] % m) x ... x ( a[n] % m))  % m

二、代码测试

public class CoresidualTest {private static void testAdd() {System.out.println("==============加法同余===========");int[] arr = new int[10];for (int i = 0; i < 10; i++) {//  生成10个随机数for (int j = 0; j < 10; j++) {arr[j] = (int) (5555687 * Math.random());}//  计算(arr[0] + ... + arr[9]) % 56 == (arr[0] % 56 + arr[1] % 56 + ... + arr[9] % 56) % 56int ans1 = 0, ans2 = 0;for (int j = 0; j < 10; j++) {ans1 += arr[j];ans2 += arr[j] % 56;}System.out.println(ans1 % 56 == ans2 % 56);}}private static void testMultiply() {System.out.println("==============乘法同余===========");int[] arr = new int[10];for (int i = 0; i < 10; i++) {//  生成10个随机数for (int j = 0; j < 10; j++) {arr[j] = (int) (10 * Math.random());}//  计算(arr[0] * ... * arr[9]) % 56 == ((arr[0] % 56) * (arr[1] % 56) + ... * (arr[9] % 56)) % 56int ans1 = 1, ans2 = 1;for (int j = 0; j < 10; j++) {ans1 *= arr[j];ans2 *= arr[j] % 500;}System.out.println(ans1 % 10 == ans2 % 10);}}public static void main(String[] args) {//  测试加法同余testAdd();//  测试乘法同余testMultiply();}
}

相关文章:

  • 《MySQL下载安装:Linux下载MySQL 5.7版本》
  • 镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆
  • 每天学一个 Linux 命令(18):mv
  • Qt实现文件传输服务器端(图文详解+代码详细注释)
  • tar压缩
  • 大语言模型
  • centosu7 二进制安装mysql5.7
  • Linux——消息队列
  • Spring Boot集成MinIO的详细步骤
  • 避坑,app 播放器media:MediaElement paly报错
  • 子函数嵌套的意义——以“颜色排序”为例(Python)
  • css 中float属性及clear的释疑
  • 小白如何从0学习CSS
  • Spark-SQL与Hive的连接及数据处理全解析
  • 关于STM32创建工程文件启动文件选择
  • 服务器带宽问题,以及服务器的上传下载速度,异常卡顿等
  • 通过建模和仿真进行高速连接器设计
  • 绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力【2】
  • SDK游戏盾ip可以破解吗
  • Elasticsearch 8.18 中提供了原生连接 (Native Joins)
  • 商城网站制作/广州网站优化运营
  • 泰安网站制作服务/国际军事最新消息今天
  • 国际知名设计公司收入/株洲seo优化公司
  • wordpress自定义面板/免费seo推广计划
  • 流行的网站开发技术/58同城如何发广告
  • 单位做网站资料需要什么软件/培训学校资质办理条件