A*B mod C的计算方法

2024-04-23 19:38
文章标签 mod 计算方法

本文主要是介绍A*B mod C的计算方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A*B mod C的计算方法

方法一:

大家都能想到,计算A*B的值,然后在计算A*B mod C的值。这是最简单的,但是这个有个弊端,即a*b的值不能太大,太大可能溢出。

方法二:

回顾进制转换的知识,二进制转换为10进制可以以2的权值相加(貌似是这样描述的)。比如13=(1101)2=1*2^3+1*2^2+0*2^1+1*2^0。同样的,当我们计算A*B的时候,也可以将B化成2^n相加的式子。于是,我们可以将a*b mod c转换成[a*(2^b0+2^b1+……2^bn)] mod c=[a*2^b0+a*2^b1+……a*2^bn] mod c。利用公式(a+b)mod c=[(a mod c)+(b mod c)]mod c这个公式进行运算。

代码:

int mul(int a,int b,int c)

{

      int result,tmp;

      tmp=a%c;

     while(b)

     {

           if(b&1)    //根据2相应二进制位的值判断是否加A*2^n;因为有对b进行右移运算,所以每次只需判断最末位的结果就可以。

          {

               result+=tmp;

               if(result>=c)

                  result-=c;

         }

         tmp<<=1; //计算 A*2^n的值。

         if(tmp>=c)

           tmp-=c;

      b>>=1;

   }

   return result;

}

方法三:

乘法可以这样算:a*b=(a&1)*b+[(a>>1)*b]<<1。同时,有公式:(a+b)mod c=[(a mod c)+(b mod c)]mod c

unsigned long long mul(unsigned long long a,unsigned long long b,unsigned long long c)
{
unsigned long long int a1=a,b1=b,c1=c;

if(!a1)
   return 0;
    return (((a1&1)*b1)%c1+(mul(a1>>1,b1,c1)<<1)%c1)%c1;
}

这篇关于A*B mod C的计算方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929699

相关文章

Go语言中的go.mod与go.sum

问题1:什么是go.mod以及它是用来解决什么问题的? go mod 是 Go 语言引入的包管理工具,用于解决 Go 语言项目在依赖管理方面的问题。 传统上,若不使用go mod,则需要要通过GOPATH来管理依赖,而这种方式存在一些问题: 如1. 包管理依赖不明确 2. 依赖库的版本管理 3. 需要手动管理同步依赖的复杂性等 而go mod可以帮助开发者在项目中明确管理依赖的版

顶顶通呼叫中心中间件-机器人测试流程(mod_cti基于FreeSWITCH)

感兴趣的话可以点后面链接添加联系方式顶顶通小孙   一、打开ccadmin-web并且创建分机 1、登录ccadmin-web 登录地址:http://ddcti.com:88 登录之后根据下图去登录ccadmin-web系统。 2、创建分机 点击呼叫中心 -> 点击分机设置 -> 点击新增,点击新增后还需要查看后面的图片去配置分机名称和分机密码。 二、注册分机

【Golang】Steam 创意工坊 Mod 文件夹批量重命名

本文将介绍一个使用Go语言编写的脚本,其主要功能是解析XML文件并基于解析结果重命名文件夹。这个脚本适用于需要对文件夹进行批量重命名,并且重命名规则依赖于XML文件内容的情况。 脚本功能概述  Steam创意工坊下载的Mod文件夹批量重命名为id+名称 运行前: 运行后: 步骤: 获取当前工作目录:脚本首先获取当前的工作目录,以便后续操作基于此目录进行。读取目录内容:接着,脚本读取并

ubuntu12.0.4apache安装mod_security模块

Ubuntu 12.0.4在apache加载mod_security模块 (文档省略make和make install) 1.安装apr  ./configure --prefix=/usr/local/apr 出现这句话 cannot remove `libtoolT': No such file or directory  打开configure文件 gedit configu

tomcat学习(五) 使用apache httpd的mod_proxy实现tomcat反向代理以及负载均衡

mod_jk只能反代AJP,配置复杂一些,不做介绍,这里介绍使用mod_proxy反代 1、安装httpd yum install httpd 2、查看httpd proxy模块有没有启动 httpd -M 这里安装的是2.4.6版,已经启动,不用额外启用 3、配置httpd cd /etc/httpd/confgedit httpd.conf 添加配置 Proxy

多分类问题中评价指标F1-Score 加权平均权重的计算方法

多分类问题中评价指标F1-Score 加权平均权重的计算方法     众所周知,F1分数(F1-score)是分类问题的一个衡量指标。在分类问题中,常常将F1-score作为评价分类结果好坏的指标。它是精确率和召回率的调和平均数,值域为[0,1]。 F 1 = 2 ∗ P ∗ R P + R F_1=2*\frac{P*R}{P+R} F1​=2∗P+RP∗R​     其中,P代表着准确率(

复活节的计算方法

复活节(Easter),是纪念耶稣基督复活的节日,在西方教会传统里,春分之后第一次满月之后的第一个星期日即为复活节。 下面是一个简单的计算复活节的算法,仅供参考! 1、设要求的那一年是Y年,从Y减去1900,其差记为N。 2、用19作除数去除N,余数记为A。 3、用4作除数去除N,不管余数,把商记为Q。 4、用19去除7A+1,把商记为B,不管余数。 5、用29去除11A+4-B,余数

HDU2815 Mod Tree【高次同余方程】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2815 题目大意: 有一颗树,每个节点有K个儿子,那么问题来了:能否算出这棵树的最小深度D,使得这个深度 的节点数对P取模的结果为N吗? 思路: 转换一下题目含义,就变成了解K^i = N(mod P),典型的A^i = B(mod C)问题,此题B的范围 明显在[0,C-

【转】【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】

【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】 以下内容全部原创,转载请注明作者 : AekdyCoin 以及本文地址 曾经看过如下一个公式: 以上的公式如果第一次见到,难免有不少疑惑: 为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确? 今天突发奇想,在纸上YY以后得到了以下证明

推荐系统三十六式学习笔记:原理篇.近邻推荐09|协同过滤中的相似度计算方法有哪些?

目录 相似度的本质相似度的计算方法:1、欧式距离2、余弦相似度3、皮尔逊相关度4 、杰卡德(Jaccard)相似度 总结 相似度的本质 推荐系统中,推荐算法分为两个门派,一个是机器学习派,一个是相似度门派。机器学习派是后起之秀,而相似度门派则是泰山北斗。 近邻推荐,近邻并不一定只是在三维空间下的地理位置的近邻,也可以是高维空间的近邻。 近邻推荐的核心就是相似度计算方法的选择,由