取余运算||快速幂

题目描述

输入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可以减一

最后将暂存器和x乘起来即可

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int  a,b,s;
int res=1;
int pw(int j,int k)
{
    if(k==0)
    {
        res=res%s;
        return res;
    }
    j=j%s;
    if(k%2==1)
    {
        res=res*j;
        res=res%s;
        k--;
        pw(j,k);
    }
    else
    {
        k=k/2;
        j=j*j;
        pw(j,k);
    }
}
int main()
{
    cin>>a>>b>>s;
    long long x=1;
    x=pw(a,b);
    cout<<a<<"^"<<b<<" mod "<<s<<"="<<x;
}

原文地址:https://www.cnblogs.com/ztz11/p/8973023.html

时间: 2024-10-25 08:54:02

取余运算||快速幂的相关文章

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/

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

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 取余运算||快速幂 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接: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

为什么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