首页 > 其他分享 >洛谷题单指南-分治与倍增-P1226 【模板】快速幂

洛谷题单指南-分治与倍增-P1226 【模板】快速幂

时间:2024-09-12 12:13:17浏览次数:11  
标签:return int 洛谷题 P1226 1ll res ksm 15 模板

原题链接:https://www.luogu.com.cn/problem/P1226

题意解读:快速幂模版题。

解题思路:

1、分治法

要计算a^b,可以对b分情况讨论:

如果b是偶数,即b = 2t,a^b = a^t * a^t

如果b是奇数,即b = 2t + 1,a^b = a * a^t * a^t

很容易用递归实现

100分代码:

#include <bits/stdc++.h>
using namespace std;

int a, b, p;

//计算x^y%p
int ksm(int x, int y)
{
    if(y == 0) return 1 % p;
    int t = ksm(x, y / 2);
    if(y % 2 == 0) return 1ll * t * t % p;
    else return 1ll * x * t % p * 1ll * t % p;
}

int main()
{
    cin >> a >> b >> p;
    printf("%d^%d mod %d=%d", a, b, p, ksm(a, b));
}

2、倍增法

基于任意整数都可以转换成若干个2的次幂之和,如15 = 2^0 + 2^1 + 2^2 + 2^4

这样一来,计算a^b,如果b=15,可以变成计算a^(2^0 + 2^1 + 2^2 + 2^4)

由于15用二进制表示为1111,因此可以通过移位操作来枚举15的每一个2的次幂,累乘即可

每移位一次,要累加的值a = a * a,如果当前位是1,说明需要累乘,如果当前位为0,说明不需要累乘

100分代码:

#include <bits/stdc++.h>
using namespace std;

int a, b, p;

//计算x^y%p
int ksm(int x, int y)
{
    int res = 1;
    while(y)
    {
        if(y & 1) res = 1ll * res * x % p;
        y = y >> 1;
        x = 1ll * x * x % p;
    }
    return res;
}

int main()
{
    cin >> a >> b >> p;
    printf("%d^%d mod %d=%d", a, b, p, ksm(a, b));
}

 

标签:return,int,洛谷题,P1226,1ll,res,ksm,15,模板
From: https://www.cnblogs.com/jcwy/p/18409583

相关文章

  • 信息化项目工作总结报告模板(第1章附目录)
    1项目概述1.1项目来源项目建设单位:市自然资源局;项目名称:X市土地二级市场网上交易系统建设项目;项目金额:XXX元;项目资金来源:政府财政资金。1.2建设目标按照“共建共治共享”的基本原则和“统筹规划、分步实施、业务属地管理、系统持续运营”的基本思路,结合X市土地二级市......
  • pbootcms模板指定栏目标签调用
    指定栏目标签适用范围:全站任意地方均可使用标签作用:用于调导航菜单栏目列表,对应后台的“基础内容>内容栏目”1、指定栏目列表{pboot:sortscode=*}<ahref="[sort:link]">[sort:name]</a>{/pboot:sort} 控制参数:scode=* 栏目编码,必填,用于控制输出的栏目,可以同时输......
  • pbootcms模板如何实现产品置顶
    要在PBootCMS中实现产品的置顶功能,你可以按照以下步骤操作:定位到模板文件:打开你的网站后台。导航到模板管理部分,找到templatesdefault目录下的index.html文件。修改产品列表查询参数:在index.html文件中找到展示产品列表的部分。修改产品列表的查询参数,将order=sorti......
  • 洛谷题单指南-分治与倍增-P1966 [NOIP2013 提高组] 火柴排队
    原题链接:https://www.luogu.com.cn/problem/P1966题意解读:计算两个序列∑(ai​−bi​)^2的最小值,对10^8-3取模。解题思路:1、贪心思路要使得两个序列对应位置元素之差的平方和最小,必须满足两个序列相对排序是一致的,什么意思?设a序列有两个元素:a1,a2,b序列有两个元素b1,b2当a1<a2,b......
  • 原神蒙德-Typora模板
    基于Newsprint主题开发的一种Typora模板新建模板打开Typora-文件-偏好设置-外观-打开主题文件夹找到其中的Newsprint(应该有一个文件夹+一个css,都要),拷贝副本,重命名(我命名的是“custom”),一定要这一步,不然后期更新的时候会覆盖修改打开其中的custom.css,用以下代码......
  • P1439 【模板】最长公共子序列
    link【模板】最长公共子序列题目描述给出$1,2,\ldots,n$的两个排列$P_1$和$P_2$,求它们的最长公共子序列。输入格式第一行是一个数$n$。接下来两行,每行为$n$个数,为自然数$1,2,\ldots,n$的一个排列。输出格式一个数,即最长公共子序列的长度。样例#1样例输入#1......
  • Solidworks学习:在新建零件时总是提示「默认模板无效」的解决方案
    在我们打开Solidworks新建零件或装配体时,总是提示我们「默认模板无效」。然而,即便我们对其置之不理并继续创建,依然能够顺利完成,貌似此“默认模板无效”的提示对我们毫无影响。可若真无影响,那它又为何要显现这一提示呢?其实,这个默认模板的作用主要是新建文件的时候,让新建零件里......
  • 健身运动俱乐部主题网页设计制作 | html网页模板源码
    文章目录网站主题网站描述网站介绍网站演示学习理念更多干货一、网站主题健身网站、健身房网站、健身网页、健身房网页、健身网页、团操运动网页、健身俱乐部html网页、html健身运动主题网页、html网页设计与制作、学生期末网页大作业二、网站描述编码:A04、页数:6页,技术:h......
  • 洛谷题单指南-分治与倍增-P1908 逆序对
    原题链接:https://www.luogu.com.cn/problem/P1908题意解读:求序列逆序对数。解题思路:1、暴力法对于每一个数,寻找后面有多少数比其小,或者采用冒泡排序,交换的次数即逆序对的个数,复杂度为O(n^2)2、归并排序法在归并排序过程中,会进行有序序列的合并,设两部分连续的有序序列为a[s1,......
  • Vue模板语言入门
    一、绑定事件监听        接上集,如果想看vue基础请移步主页      1、默认事件形参event:            即在对象触发事件的函数的默认参数,即使在标签内触发函数位置没写event参数也可以在script函数中直接写:函数名(event){函......