首页 > 其他分享 >复习:位运算

复习:位运算

时间:2023-12-26 21:56:21浏览次数:30  
标签:ld a% 复习 ll long ans 运算

为了打篮球杯而捡起来之前学的oi

TA?那是什么东西,能吃吗?

/其实是感觉这行现状一般前景惨淡想着我还年轻趁早跑路比较好

本篇大概是位运算专题,之后以位运算为主的题目基本都会放在这里吧 主要以题目为主,大概不会出单独章节讲知识

1.求a^b%p,ab均小于1e9

直接一个个乘的话时间复杂度是O(b)

考虑位运算,任何一个自然数可以用多个2的n次方相加得到 例如10011,可以表示为\(2^0*1+ 2^1*1+2^3*0+2^4*0+2^5*1\)

如果b可以转化为一个k位的二进制数,然后a^b就可以表示为\(a*2^{k-1}*c_{k-1}*a*2^{k-2}*c_{k-2}+....*a*2^0*c_0\),其中c为0或1
每次都进行b>>1的操作,并进行b&1的判断。由于&是按位进行,所以可以判断最后一位是否是1.若是1则更新答案。并且每次循环都需要更新要乘的a值,比如如果是1011,要乘的a值则分别为a,a^2 以及a^8

点击查看代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,p;//求a的b次方对p取模 
ll ans=1;
int main()
{
  cin>>a>>b>>p;
  for(;b;b>>=1)
  {
  	if(b&1) ans=ans*a%p;
  	a=a*a%p;//如果末位是0则不更新ans。 
  }
  printf("%ld",ans);
  return 0;
}

2.64位整除乘法,求a*b%p

和上题思路类似,由幂变成了相乘,原本更新ans式子里的相乘变成相加,ans初值改为0即可

点击查看代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,p;
ll ans=0;
int main()
{
  scanf("%ld%ld%ld",&a,&b,&p);
  for(;b;b>>=1)
  {
  	if(b&1) ans=ans+a%p;
  	a=a+a%p;//如果末位是0则不更新ans。 
  }
  printf("%ld",ans);
  return 0;
}

标签:ld,a%,复习,ll,long,ans,运算
From: https://www.cnblogs.com/miku-dayo/p/17929347.html

相关文章

  • Java 日期转换运算工具类
    ​  参考文档:Java日期转换运算工具类-CJavaPy1、Date常用方法java.util.Date 是Java中表示日期和时间的一个基础类。但随着时间的推移,许多其方法被标记为过时,并被推荐在Java8引入的 java.time 包中的新类替代。但是,Date仍然在很多旧的代码库中广泛使用,并在与某......
  • NLP复习之向量语义
    向量语义词汇语义语义概念(senseorconcept)是单词含义(wordsense)的组成部分,词原型可以是多义的。同义词是指:在某些或者全部的上下文中,单词之间有相同或近似含义可能没有完全相同含义的同义词例子!即使在很多情况下(上下文语境),单词间的含义是相同的。但仍然有可能......
  • 大语言模型生成模型的源码结构复习
    modeling_gpt2.py:1099iflabelsisnotNone:#movelabelstocorrectdevicetoenablemodelparallelismlabels=labels.to(lm_logits.device)#Shiftsothattokens<npredictnshift_logits=lm......
  • 在 Python 中,​​?:​​​ 符号并不是一个有效的运算符。这个符号在其他一些编程语言
    在Python中,?:符号并不是一个有效的运算符。这个符号在其他一些编程语言中,如JavaScript或C,被称为条件(三元)运算符。然而,在Python中,我们使用if-else表达式来达到相同的目的。例如:x=10y=20print("xisgreater")ifx>yelseprint("yisgreater")在上述代码中,如果......
  • 两个Excel表格核对 excel表格中# DIV/0 核对两个表格的差异,合并运算VS高级筛选
    两个Excel表格核对  excel表格中#DIV/0核对两个表格的差异,合并运算VS高级筛选1.两列顺序一样的数据核对方法1:加一个辅助列,=B2=C2结果为FALSE的就是不相同的方法2:两列数据,按CTRL+\然后直接标记颜色就把不一样的找出来2.两列顺序不一致的情况方法1:用VLOOKUP来查找匹......
  • 【位运算】二进制中1的个数 (lowbit运算)
    lowbit的概念我们知道,任何一个正整数都可以被表示成一个二进制数。如:(2)10=(10)2(4)10=(100)2那么定义一个函数f(x)=lowbit(x),输入一个十进制数,返回二进制中最低一位的1所表示的值,如lowbit(4)=4 先了解原码补码反码原码:是最简单的机器数表示法。用最高位表示符号位,‘1......
  • MSSQL执行查询报错“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其
     MSSQL执行查询报错“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。”报错截图: 根本原因如提示,列不一致,列的个数和列名,顺序都需要一致。 ......
  • 数据库论述题复习
    1.数据库的三级模式和两级映像架构对数据库系统有何重要意义三级模式视图层/外模式把现实世界信息按不同用户观点抽象为多个逻辑数据结构,每个逻辑结构称为视图每个视图称为数据库的一个子模式逻辑模式综合所有视图,把所有用户关心的现实世界抽象为逻辑模式描述数据......
  • 接口自动化测试复习巩固第二天,管理员后端验证和接口抓包+requests实现
    接口自动化测试第二天,需要用到的第三方库有os,openpyxl,json,pytest,requests首选我们今天的目标是写出一个测试登录用例的脚本,这里我用的是分层设计,整个框架暂时被分为工具层,测试数据层,用例层。工具层:这里我会先放目前需要用到的脚本测试数据层:用例执行时需要的测试数据,我会以exce......
  • Day05位运算符
    位运算符//位运算符:&,|,^,<<,>>//位运算,与二进制有关A=00111100B=00001101A&B=00001100//按位与(&),对于两个操作数的每一个对应位,如果两个位都是1,则结果位为1,否则为0A|B=00111101//按位或(|),对于两个操作数的每一个对......