Luogu 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

  这是一道很有趣的水题,如果知道公式。

  一般求解会溢出,导致答案错误。

  这里介绍取模的一个公式: a*b%k=(a%k)*(b%k)%k.

  在我们这道题中是b^p = (b^(p/2)%k) * (b^(p/2) %k)%k

  可以看出来运用的是分治的思维。那么一只分解到p == 1时就能够返回了。

  蛤?你说p等于奇数时候? 那就把那个奇数再挑出来呗。 b^p = b * b^(p/2) * b^(p/2)

 1 #include <cstdio>
 2
 3 long long b, k;
 4
 5 long long fff(long long p)
 6 {
 7     if(p == 1)    //p等于1时 b^p%k = b%k;
 8         return b%k;
 9     long long temp = fff(p/2); //分~
10     temp = (temp*temp)%k;    //注意上面p==1时已经%k,所以这里不需要在括号里面%k
11     if(p&1)    //如果p等于奇数
12         temp = (temp*b)%k;
13     return temp;
14 }
15
16 int main()
17 {
18     long long p;
19     scanf("%lld%lld%lld", &b, &p, &k);
20     long long ans = fff(p);
21     printf("%lld^%lld mod %lld=%lld", b, p, k, ans);
22
23     return 0;
24 }
时间: 2024-10-07 22:26:02

Luogu P1226 取余运算||快速幂(数论,分治)的相关文章

luogu 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<iostream> using namespace std; int b,p,k; #define LL long long LL q_

洛谷——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

洛谷 P1226 取余运算||快速幂 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1226 题目描述 输入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 快速幂模板. AC代码: 1 #include<io

取余运算||快速幂

题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出"b^p mod k=s" s为运算结果 思路: 显然取余和乘法谁都会 关键在于快速 我们知道乘方有一个性质 x^n=(x^2)^(n/2) 这样我们就能通过二分使时间复杂度降到log级别 你可能会说,n%2==1怎么办?? 和简单,再定义一个变量作为暂存器,乘一下x 这时候又有另一个定理 x^n=x^(n-1)*x 所以n可以减一 最

为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash&amp;(h-1)=hash%h)位运算公式等价于取余运算?

1.什么是hash表? 答:简单回答散列表,运算在hash结构散列(分散)存放. 2.如何散列排布,如果均匀排布? 答:取余运算 3.Java中如何实现? 答:hash&(h-1) 4.为什么hash&(h-1)=等价于hash%h java的h(表长)一定是2的指数次幂,2的指数次幂2n 2n的结果:一定长这样10000...(n个0) 2n-1的结果:一定这样1111(n-1)个1 举个例子: 当h=16,对应的二进制:00010000 h-1=15,对应的二进制:00001111 可

1497 取余运算

1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描述 Output Description 输出b^p mod k=? =左右没有空格 样例输入 Sample Input 2  10  9 样例输出 Sample Outp

取模性质,快速幂,快速乘,gcd和最小公倍数

一.取模运算 取模(取余)运算法则: 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; 6.( a*(b*c)%p )%p =( c*(a*b)%p )%p; 7.( (a+b)%p*c )%p= ( (a*c)%p + (b*c)%p )%p; 几条重要性质: 1.a≡

【分治】取余运算

问题 E: [分治]取余运算 时间限制: 1 Sec  内存限制: 128 MB提交: 16  解决: 6[提交][状态][讨论版] 题目描述 输入b,p,k的值,求bp mod k的值.其中b,p,k*k为长整型数. 输入 三个整数,分别为b,p,k的值 输出 bp mod k 样例输入 2 10 9 样例输出 2^10 mod 9=7 提示 解题思路:分治,顾名思义,把一个大问题分解为多个小问题. 这里有一个公式,利用这个公式通过递归求得. 代码: #include <iostream>

codevs 1497取余运算

1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描述 Output Description 输出b^p mod k=? =左右没有空格 样例输入 Sample Input 2  10  9 样例输出 Sample Output 2^10 mod