zoukankan      html  css  js  c++  java
  • 快速幂求解与快速幂取模

    快速幂求解与快速幂取模

    快速幂求解与快速幂取模

    以下内容简单介绍以下有关快速幂的基本知识。

    什么是快速幂?

    顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

    算法原理

    1. 根本方法思想:位运算

    快速幂计算幂

    int pow(int a,int b){
      int r=1,base=a;
      while(b){
        if(b&1) r*=base;
        base*=base;
        b>>=1;
      }
      return r;
    }
    

    板子,记住就好。

    快速幂求模

    long long powM(long long a, long long b, long long mode)
    {
    	long long sum = 1;
    	a = a % mode;
    	while (b > 0) {
    		if (b % 2 == 1)		//判断是否是奇数,是奇数的话将多出来的数事先乘如sum
    			sum = (sum * a) % mode;
    		b /= 2;
    		a = (a * a) % mode;// 不断的两两合并再取模,减小a和b的规模
    	}
    	return sum;
    }
    

    板子,记住就好。

    来道题http://poj.org/problem?id=1995

    题解如下:

    #include<cstdio>
    using namespace std;
    
    long long powM(long long a, long long b, long long mode)
    {
    	long long sum = 1;
    	a = a % mode;
    	while (b > 0) {
    		if (b % 2 == 1)		//判断是否是奇数,是奇数的话将多出来的数事先乘如sum
    			sum = (sum * a) % mode;
    		b /= 2;
    		a = (a * a) % mode;// 不断的两两合并再取模,减小a和b的规模
    	}
    	return sum;
    }
    
    int main ()
    {
        long long int  N;
        scanf("%lld",&N);
        for(long long int i = 0;i < N;i++)
        {
            long long int M;
            scanf("%lld",&M);
            long long int n;
            scanf("%lld",&n);
            long long int  sum = 0;
            for(long long int  j = 0;j < n;j++){
                long long int m,n;
                scanf("%lld%lld",&m,&n);
                sum += pow(m,n,M);
            }
            sum %= M;
            printf("%lld\n",sum);
        }
    }
    
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    一步步构建大型网站架构
    IIS访问设置
    如何删除windows中的服务
    IIS下对WebConfig加密后无法访问网站
    ConfigurationManager不认的问题
    ORA12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
    PostgreSQL中表和字符串大写的问题
    ASP.NET中注册客户端脚本的三种方式
    装箱(boxing)和拆箱(unboxing)
    windows开启防火墙后IIS下的网站外网无法访问
  • 原文地址:https://www.cnblogs.com/lightac/p/10534746.html
Copyright © 2011-2022 走看看