取模运算
来源:互联网 发布:淘宝网禁止出售黄赌毒 编辑:程序博客网 时间:2024/05/29 03:27
在散列表这类的应用中,除留余数法是比较常见的。在使用除留余数法时取模运算是必不可少的,接下来介绍下取模运算:
法则:
1.(a+b)%p=(a%p+b%p)%p
2.(a-b)%p=(a%p-b%p)%p
3.(a*b)%p=((a%p)*(b%p))%p
4.(a^b)%p=((a%p)^b)%p
5.((a+b)%p+c)%p=(a+(b+c)%p)%p
应用场景:
1.判别奇偶数
2.判别素数——用比该数的平方根小的正整数去除这个数
3.求最大公约数——欧几里得辗转相除(gcd(a,b)=gcd(b,(a)mod(b)))
4.求幂运算——例如想知道一个较大的数—a的b次幂的最后一位是多少
5.密码学应用
其中4的应用较为有意思,可以将时间复杂度限定在O(b^1/2)b表示指数,示例demo如下:
//x为底数,n为指数,p为模数//思路:n为偶数时x^n=(x*x)^[n/2] // n为奇数时 x^n=x*(x*x)^[n/2]#include <stdio.h>unsigned int PowerMod(unsigned int x,unsigned int n,unsigned int p);int main(){ printf("result:%d",PowerMod(3333,77777,10)); return 0;} unsigned int PowerMod(unsigned int x,unsigned int n,unsigned int p){ if(n==0) { return 1; } unsigned int temp1=(x*x)%p; unsigned int temp=PowerMod(temp1,n/2,p);//递归的原因是由于n为奇数导致。 if((n&1)!=0)//n为奇数 ,将式子展开后,奇数时多出这一步 temp=(temp*(x%p))%p; return temp;}
按照这种方式可以极大地降低时间复杂度(=^ ^=)
1 0
- 取模运算符
- 大数取模运算
- 负数取模运算
- 负数取模运算
- 快速取模运算
- 负数取模运算
- 取模运算
- 大数取模运算
- 取模运算
- 取模运算
- 取模运算
- poj3980取模运算
- 取模运算
- php 取模运算
- 取模运算
- 负数取模运算
- Python取模运算
- 取模运算总结
- A Non-Local Cost Aggregation Method for Stereo Matching
- PHP扩展开发—windows
- 起飞
- ecshop后台添加菜单
- Java面试——String、StringBuider以及StringBuffer的区别和使用场景
- 取模运算
- SQL经典40句
- 【安卓】imageview 安卓解决控件铺满问题
- java.io常见流/java.io.file文件操作大全
- 【H5+ & Quick-cocos2dx整合】之iOS 四 协调H5+和Quick-Cocos2dx之间工作
- android studio | openGL es 3.0增强现实(AR)开发 (3) OpenGL es3.0基本知识介绍
- 1.MVC5 起航
- 用python给微信公众号发消息
- Android 的媒体路由功能应用与框架解析 MediaRouter