快速幂位运算版

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 /*int pow_mod(int x , int  y , int p){
 6     int ret = 1;
 7     while(y){
 8         if(y & 1) ret = (ret * x) % p;
 9         printf("ret = %I64d , x = &I64d , y = %I64d\n" , ret , x , y);
10         x = (x * x) % p ;
11         y >>= 1;
12     }
13     return ret;
14 }
15 */
16 int pow_mod(int m , int n , int k){
17     int b = 1;
18     while (n){
19           if (n & 1)
20              b = (b * m) % k;
21           n = n >> 1 ;
22           m = (m * m) % k;
23     }
24     return b;
25 }
26 int main(){
27     int x , y , p; //x 的 y 次幂 对 p取模
28     cin >> x >> y >> p;
29     cout << pow_mod(x , y , p);
30 }

位运算

广告:清北学堂

时间: 2024-10-10 08:04:24

快速幂位运算版的相关文章

矩阵快速幂——将运算推广到矩阵上HDU 1575

/* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #include<cstdio>  #include<cstring>  using namespace std;  const int maxn = 15;  #define mod 9973  int res[maxn][maxn];  int n;  void mul(int a[]

高精度快速幂(Java版)

1 import java.io.*; 2 import java.math.*; 3 import java.util.*; 4 import java.text.*; 5 6 public class Main { 7 public static void main(String[] args) { 8 Scanner cin = new Scanner(System.in); 9 BigInteger a, b, m, ans; 10 while (cin.hasNext()) { 11

N皇后(回溯版+位运算版)

题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上. 输入描述 Input Description 给定棋盘的大小n (n ≤ 13) 输出描述 Output Description 输出整数表示有多少种放置方法. 样例输入 Sample Input 8 样例输出 Sample Output 92 数据范围

洛谷——P1226 取余运算||快速幂

P1226 取余运算||快速幂 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 输入输出样例 输入样例#1: 复制 2 10 9 输出样例#1: 复制 2^10 mod 9=7 快速幂取膜版 #include<cstdio> #include<cstring> #include<iostream> #include<al

位运算 使用技巧

位运算简介及实用技巧(一):基础篇 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算.举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110 AND 1011 ---------- 0010  -->  2 由于位运算

快速幂模版

快速幂模版 快速幂的思想是分治,根据题目的数据要注意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; } 快速幂普通版(未取余) 快速幂取余数版:

快速幂(讲解)

对于快速幂有人会问:要快速幂干什么,cmath库里的pow就很好用啊! 但是你有没有想过他的时间复杂度!假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,况且有些大佬说:用stl比用循环还慢.但是我们在这里所说的快速幂的目的就是做到快速求幂,快速幂能做到O(logn),快了好多好多. 快速幂的原理是用二分及二进制优化的. 假设我们要求a^b,那么我们在这里如果我们要用快速幂来做这道题,我们可以把b拆成二进制,该二进制的第i位的权为2^(i-1),例

C位运算笔记(根据网上内容整理)1

什么是位运算?    程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. 各种位运算的使用 === 1. and运算 ===(同真为真) and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位.这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数. === 2. or运算 ===(一真为真) or运算通

SHUOJ1857 Yaoge鸡排系列之九——好多鸡排!!!【矩阵快速幂】

转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1857 1857: Yaoge鸡排系列之九——好多鸡排!!! Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 98  Solved: 6 Description Yaoge买了n块鸡排,其中第n块鸡排的质量为M(n),同时