快速幂模版

快速幂模版

快速幂的思想是分治,根据题目的数据要注意long long

快速幂普通版,比取余版快,但容易超范围,慎用,一般可用取余版MOD设为INF:

//快速幂普通版(未取余)
long long quickpow(long long n,long long k)
{
    long long res=1;
    while(k){
        if(k&1) res*=n;
        n*=n;
        k=k>>1; //即k/=2,采用位运算更快
    }
    return res;
}

快速幂普通版(未取余)

快速幂取余数版:

//快速幂取余版
long long quickpow(long long n,long long k,long long MOD)
{
    long long res=1;
    while(k){
        if(k&1) res=(res*n)%MOD;
        n=(n*n)%MOD;
        k=k>>1;
    }
    return res;
}

快速幂取余版

时间: 2024-12-12 23:13:58

快速幂模版的相关文章

Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)

题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. 1 /* 2 | 1, -1 | | fn | 3 | 1, 0 | | fn-1 | 4 */ 5 #include <iostream> 6 #include <cstdio> 7 #include <cstring> 8 using namespace std; 9 typedef __int64 LL; 10 LL mod =

poj1995 Raising Modulo Numbers (快速幂,挑战有模版,纪念一下A的第一道快速幂)

/*快速幂,时间复杂度,数据范围*/ #include <iostream> #include <stdio.h> #include <string.h> using namespace std; long long a, b; int n, m; int sum, res; typedef long long ll; ll mod_pow(ll x, ll y, int z) { res = 1; while(y > 0){ if(y & 1) res

HDU——1005Number Sequence(模版题 二维矩阵快速幂+操作符重载)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 148003    Accepted Submission(s): 35976 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

bnu 34985 Elegant String(矩阵快速幂+dp推导公式)

Elegant String Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next Type: None None Graph Theory      2-SAT     Articulation/Bridge/Biconnected Component      Cy

矩阵快速幂专题(一)

最近闲来无事,准备集中精力刷一波数论与图论.矩阵快速幂是数论里面的重要组成部分,值得我好好学习一下.因为题目比较多,分析也比较多,所以将此专题分成几个部分.做完这一专题,可能会暂时转向图论部分,然后等我组合数学学得差不多了,再回过头来继续做数论题. 矩阵快速幂算法的核心思想是将问题建模转化为数学模型(有一些简单题目是裸的矩阵模型,但是大部分难题就是难在要构造矩阵,用矩阵方法解决问题),推倒递推式,构造计算矩阵,用快速幂的思想求解矩阵A的n次方取mod,从而得到矩阵里面你需要的数据. 矩阵快速幂问

BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )

状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) --------------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define b(x) (1 <&l

ACM:a^b%p-数论-快速幂-快速乘

a^b Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: Description 求a的b次方,取模mod(1<=a,b,mod<=1e18) Input 多组输入,每组数据一行,3个正整数,分别为a,b,mod Output 每组数据输出一行,为答案 Sample Input 2 10 10000000 5 100 1 0 2 37 Sample Output 1024 0 0 //模版题,主要是考虑到1e18的巨大,

【bzoj2242】[SDOI2011]计算器 数论相关(快速幂+扩展欧几里得+BSGS)

2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2529 Solved: 1003 [Submit][Status][Discuss] Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p,计算满足Y^x ≡ Z ( mod P)的最小非负整数. In

HNOI2008越狱(快速幂)

快速幂水过,贴一下模版. const mo=100003; var x,y,n,m:int64; function power(num,times:int64):int64; var temp:int64; begin if times=1 then exit(num); temp:=power(num,times>>1); power:=(temp*temp) mod mo; if times and 1=1 then power:=(power*num) mod mo; end; proc