一、快速幂的模板代码 a^b%p

#include<iostream>
using namespace std;
int main()
{
int a,b,p;
cin>>a>>b>>p;
int res = % p;
while (b)
{
if (b & ) res = res * 1ll * a % p;
b >>= ;
a = a * 1ll * a % p;
}
cout<<res<<endl;
}

注意点:

1、转换成long long类型可以直接乘1ll,作用与(long long)相同,范围大概为10^19,int为2 147 483 647。

2、以2^7为例,7 = 4(2^2) + 2(2^1) + 1(2^0);二进制形式为111,b&1为获取最后一位是否为1,b>>=1舍弃最后一位。

3、如果测试数据为123456789 0 1,res=1没有%p的话,那么结果就是1,正确应为0,所以应该初始化res就%p,res = 1 % p。

4、memset(a, val, sizeof(a))把数值val(0x00~0xFF)填充到数组a的每个字节上,一个int占用4个字节,所以用memset只能赋值出“每8位都相同”的int。0x3F3F3F3F(1 061 109 567)的两倍不超过0x7F7F7F7F(2 147 483 647),memset(a, 0x3F, sizeof(a))。0xFFFFFFFF为-1。

二、如果a, b, p范围是10^18,求a*b%p

1、那么为了不超过范围,首先得用usigned long long,2*10^19。乘法转化为加法,a^b = a * a * …… * a。a * b = a + a + ……+a。

a * 1 = 2^0 * a,

a * 2 = 2^1 * a,

a * 4 = 2^2 * a,

a * 8 = 2^3 * a,

a * 2^k = 2^k * a。

一共k+1次,k为logb级别。

#include<iostream>
using namespace std;
typedef unsigned long long ULL;
int main()
{
ULL a,b,p;
cin>>a>>b>>p;
ULL res = ;
while (b)
{
if (b & ) res = (res + a) % p;
b >>= ;
a = a * % p;
}
cout<<res<<endl;
}

最短Hamilton路径:

算法进阶:0x01 位运算的更多相关文章

  1. 曹工说JDK源码(3)--ConcurrentHashMap,Hash算法优化、位运算揭秘

    hashcode,有点讲究 什么是好的hashcode,一般来说,一个hashcode,一般用int来表示,32位. 下面两个hashcode,大家觉得怎么样? 0111 1111 1111 1111 ...

  2. 「算法竞赛进阶指南」0x01 位运算 知识笔记

    二进制是计算机的根本! 你了解她它吗? int lowbit(int x) { return x&(-x);//x&(~x+1),~x=-1-x; } int __builtin_ct ...

  3. 0x01 位运算

    都比较基础吧. 知识点 1.快速幂和快速乘(这里有一个用long double舍弃精度的做法,但是感觉既不稳又没用) 2.懒人写边目录的时候的k^1 3.lowbit,得到的是低到高第一个1的位.求一 ...

  4. N皇后-位运算优化

    N皇后问题 时间限制: 5 Sec  内存限制: 128 MB 题目描述 魔法世界历史上曾经出现过一个伟大的罗马共和时期,出于权力平衡的目的,当时的政治理论家波利比奥斯指出:“事涉每个人的权利,绝不应 ...

  5. LeetCode | 289. 生命游戏(原地算法/位运算)

    记录dalao的位运算骚操作 根据百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细 ...

  6. 剑指offer—算法之位运算(二进制中1的个数)

    位运算: 左移:m<<n将m左移n位,左移后低位补充0: 右移:m>>n将m右移n位,右移后高位补充的是符号位,负数补充1,整数补充0.(正数的边界值为(1,ox7FFFFFF ...

  7. Apriori算法-位运算-C语言

    原文地址:http://blog.csdn.net/liema2000/article/details/6118423 //////////////////////////////////////// ...

  8. 位运算之——按位与(&)操作——(快速取模算法)

    学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作, 其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描! 其中涉及位运算 ...

  9. PHP算法学习(5) 位运算

    svn地址:svn://gitee.com/zxadmin/live_z 2019年2月14日11:38:46 <?php /* * 位运算学习笔记 * * 1,php所有的数都是有符号的,无法 ...

随机推荐

  1. JDBC——DriverManager驱动管理对象

    功能 1.注册驱动 注册驱动:告诉程序使用哪个驱动jar包 写代码使用:Class.forName("com.mysql.jdbc.Driver"); 查看源码 mysql-con ...

  2. Servlet与idea

    1.idea会为每一个Tomcat部署的项目,独立建一份配置文件. 配置文件所在位置 怎么部署的?使用的第三种部署方式(查看虚拟目录) docBase部署项目存放的路径 项目目录和Tomcat部署目录 ...

  3. Linux - Shell - 参数获取

    概述 参数 背景 复习一下 shell 脚本的参数获取 场景 os centos7 1. 参数: 基础 概述 简单描述 参数 1. 获取参数 获取 第一个 参数 获取参数 使用 ${num} 获取参数 ...

  4. oracle dataguard配置

    1.archivelog设置:(存档模式) 2.standy controlfile 设置: alter database create standby controlfile as '/data/o ...

  5. 在多租户(容器)数据库中如何创建PDB:方法4 克隆远程Non-CDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:克隆远程Non-CDB(从 Non-CDB 中进行远程克隆).将 非CDB数据库PROD1 远程克隆为 CDB1 中的 PDB7 对 ...

  6. 【牛客小白月赛21】NC201605 Bits

    [牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ...

  7. 微信小程序图片设置圆角进入页面闪动

    transform变形 当我们通过某些行为触发页面进行大面积绘制的时候,浏览器由于没有事先准备,应付渲染够呛,于是掉帧,于是卡顿.而will-change则是真正的行为触发之前告诉浏览器:“我待会儿就 ...

  8. 一、centos7更改网卡名称eth0

    异步赠书:10月Python畅销书升级 [线路图]人工智能到底学什么?! 程序员10月书讯 每周荐书(京东篇):618取胜之道.质量保障.技术解密) Centos7更改网卡名称Eth0 标签: Cen ...

  9. 1.5 面试问题整理:cl

    1.自我介绍2.介绍测试的项目> 期望答案:让你介绍项目,目的是想知道你参与过该项目后,对该项目的认识程度和认识层次,从而判断你在项目中到底起多大作用. 即:测试的流程.用例设计的方法.在项目中 ...

  10. 矩阵快速幂+二分 poj3233

    #include <iostream> #include <cstdio> #include <string> #include <cstring> # ...