zoukankan      html  css  js  c++  java
  • 取模算术

    取模公式:

              (a+b) mod n=((a mod n)+(b mod n))%n

              (a-b) mod n=(a mod n -b mod n +n)mod n

               a*b mod n =(a mod n)*(b mod n)mod n

    1大整数取模:输入n,m求n%m,其中n<=10^1000000,m<=10^9

    //大整数取模
    int big_number_mod(char *str, int m){
    	int len = strlen(str), res = 0;
    	for (int i = 0; i < len; i++){
    		res = (res * 10 + str[i] - '0') % m;
    	}
    	return res;
    }
    

    2.幂取模 an mod m的值,a,n,m<=10^9。采用分治算法可以在O(longn)算出来,例如a29=(a14)2a,而a14=(a7)2,a7=(a3)2a,a3=a2a。

    //幂取模:计算a^n mod m
    //O(longn)
    int pow_mod(int a, int n, int m){
    	if (n == 0)return 1;
    	int x = pow_mod(a, n / 2, m);
    	LL ans = (LL)x*x %m;
    	if (n & 1)ans = ans*a%m;
    	return (int)ans;
    

    3.快速幂取模运算:计算an mod m 。采用快速幂将n分解为二进制。例如n=11,则10=10112,于是a11=a1+2+8,可以依次计算a,a2,a4,a8,然后计算出a11

    //快速幂取模:计算a^n mod m
    //O(longn)
    int quick_pow_mod(int a, int n, int m){
    	if (n == 0)return 1;
    	int res = 1;
    	while (n > 0){
    		if (n & 1)
    			res=res*a%m;
    		a = (a%m)*(a%m)%m; //防止溢出
    		n >>= 1;
    	}
    	return res;
    }
    

      

      

  • 相关阅读:
    cocoaPod
    Swift 命名规则
    Swift 数据类型
    Xcode Version 和Bulid 区别
    升级Xcode之后VVDocumenter-Xcode不能用的解决办法
    Mac svn
    RSA 加密
    想做AI测试,需要学习哪些数学知识?
    selenium + firefox驱动版本对应。
    开机自动启动WEB服务,共享目录。
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5801698.html
Copyright © 2011-2022 走看看