基本算法——位运算

a^b

原题链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include<iostream>
using namespace std;
long long a,b,c,t=1;
int main()
{cin>>a>>b>>c;for(;b;b/=2){if(b&1)t=t*a%c;a=a*a%c;}cout<<t%c;
}

代码思路:快速幂取模算法

  1. 变量定义:首先定义了四个变量,a 代表底数,b 代表指数,c 代表模数,t 初始化为1,用于存储最终结果的中间值。

  2. 输入读取:通过 cin>>a>>b>>c; 读取用户输入的底数 a、指数 b 和模数 c

  3. 快速幂循环:通过一个 for 循环处理指数 b 的每一位。循环条件是 b 不为0,每次循环 b 都会右移一位(b/=2),相当于不断地将指数除以2并向下取整。

    • 判断奇偶性并累乘:在循环内部,首先使用条件 if(b&1) 判断 b 当前最低位是否为1,即判断 b 是否为奇数。如果是奇数,则需要将当前的 a 对结果 t 产生的影响累加进去,即执行 t=t*a%c;。这是因为当 b 是奇数时,a^b 实际上是 a 乘以 a 的其他偶数次幂结果,这里是通过累计 t 来逐步构建这个结果。

    • 平方并取模:无论 b 的当前最低位是0还是1,都会执行 a=a*a%c;,这意味着每轮循环都将底数 a 自身平方一次,并对结果取模 c,以控制数值大小,避免溢出。

  4. 输出结果:循环结束后,变量 t 存储了 a^b \mod c的计算结果,但为了确保结果的准确性(尽管理论上已经对每步进行了取模,但再次取模作为输出是良好的编程习惯),最终输出时执行 cout<<t%c;

Raising Modulo Numbers

原题链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

 

运行代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll in(){ll ans=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}return ans*f;
}
ll clac(ll a,ll b,ll M){ll ans=1;for(;b;b>>=1){if(b&1)ans=(ll)ans*a%M;a=a*a%M;}return ans;    
}
int main(){ll q=in();while(q--){ll ans=0;ll M=in(),n=in();for(int i=1;i<=n;i++){ll a=in(),b=in();ans=(ans+clac(a,b,M))%M;}cout<<ans<<endl;}
}

代码思路

自定义输入函数in():用于读取一个整数(可以是负数),通过逐字符读取并转换为数字,同时支持负数的输入。它首先初始化结果 ans 为0,符号标志 f 为1(表示正数)。如果读取到的是负号,f 设为-1。随后读取直到遇到非数字字符,再读取数字字符并累积到 ans 中,最后根据 f 返回实际的整数值(正数或负数)。

快速幂取模函数clac():输入参数为底数 a、指数 b 和模数 M。通过循环,每次将指数 b 右移一位(除以2),并根据 b 当前最低位是否为1(即 b 奇偶性)决定是否将 a 乘入结果 ans 中,并始终对 ansa 进行模 M 的运算,以避免数值过大。最后返回计算得到的 a^b%M。

主函数main():首先读取测试用例的数量 q,然后对于每个测试用例,读取模数 M 和需要执行幂运算的次数 n。接下来,进行 n 次循环,每次循环中读取底数 a 和指数 b,调用 clac() 函数计算 a^b \mod MabmodM 的结果,并将每次的结果累加到 ans 中,每次累加后都对 M 取模以确保结果正确。最后,输出所有累加结果对 M 取模后的值。

64位整数除法

原题链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include <iostream>
using namespace std;
int main ()
{long long a,b,p,ans = 0;cin>>a>>b>>p;for (;b;b>>=1,a<<=1,a%=p)if (b&1)ans = (ans + a) % p;cout<<ans%p;return 0;
}

代码思路

这段C++代码是一个实现快速幂取模算法的程序,用于计算 a^b%p的值。快速幂算法是一种高效计算大整数幂取模的算法,特别适用于在计算机程序中处理大指数或大模数的情况,能够处理大整数情况,避免了直接计算的大规模乘法和溢出问题。

  1. long long a, b, p, ans = 0;:定义四个变量,a 和 b 分别表示底数和指数,p 表示模数,ans 初始化为0,用来存储最终的结果。cin >> a >> b >> p;:从标准输入读取三个数,分别赋值给变量abp
  2. for (;b;b>>=1,a<<=1,a%=p):这是一个循环结构,循环条件是b非零。在每次循环迭代开始时,将b右移一位(等价于除以2并向下取整),同时将a左移一位(等价于乘以2),并且对a取模p,确保a的值不会过大而导致溢出。
  3. if (b&1):判断b当前最低位是否为1(即判断b是否为奇数),这是快速幂算法的关键,仅当b为奇数时才直接累加a到结果中。
  4. ans = (ans + a) % p;:如果b是奇数,则将当前的a加上之前的累加结果ans,并对结果取模p,更新ans的值。
  5. cout << ans%p;:循环结束后,输出最终计算结果ans对模数p取模的结果。
  6. return 0;:主函数返回0,表示程序正常结束。

最短Hamilton路径

原题链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 20, M = 1 << N;
int n;
int g[N][N];
int dp[M][N];
int main() {cin >> n;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)cin >> g[i][j];memset(dp, 0x3f, sizeof(dp));dp[1][0] = 0;for (int s = 1; s < (1 << n); s++) {for (int i = 0; i < n; i++) {if ((s & (1 << i)) == 0) continue;for (int j = 0; j < n; j++) {if (i == j) continue;if ((s & (1 << j)) == 0) continue;dp[s][i] = min(dp[s][i], dp[s ^ (1 << i)][j] + g[j][i]);}}}cout << dp[(1 << n) - 1][n - 1] << endl;return 0;
}

代码思路

  1. 定义常量和变量N 表示顶点数的上限,M 是状态数(所有顶点的选与不选的组合情况)。g[N][N] 存储图的边权。dp[M][N] 用于动态规划存储中间状态和结果。

  2. 输入图的信息。

  3. 初始化 dp 数组:将所有值初始化为较大值,除了初始状态 dp[1][0] 设置为 0。

  4. 动态规划过程:遍历所有可能的状态 s。对于每个状态和当前顶点 i,通过遍历其他顶点 j 来更新 dp[s][i],即考虑从之前某个状态去掉当前顶点 i 且到达顶点 j 的最短路径加上从 j 到 i 的边权,取最小值进行更新。

  5. 最后输出到达最终状态(所有顶点都选)且在终点 n-1 的最短路径长度,即 dp[(1 << n) - 1][n - 1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车软件 OTA技术解析

汽车软件 OTA 技术概述 在当今汽车行业中,软件定义汽车的概念逐渐深入人心。随着汽车智能化和网联化的发展,汽车软件的重要性日益凸显。而汽车软件 OTA(Over-the-Air)技术作为一种重要的软件升级和维护方式,正逐渐成为汽车行业的热点话题。 汽车软件 OTA 技术是指通过无线…

逻辑回归及python实现

概述 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求参数&#xff0c;其区别在于他们的因变量不同&#x…

App Inventor 2 复制屏幕功能,界面设计更便捷,避免误删组件

“复制屏幕”功能全新上线&#xff0c;中文网独有&#xff08;MIT没有此功能&#xff09;&#xff0c;可以复制屏幕中的普通组件、图片、附件、拓展、代码块。更多升级详情可查看发布日志。 下面演示一下屏幕的复制效果&#xff1a; 1、Screen1屏幕上有若干组件、及一个SQLit…

美业SaaS系统源码分享-收银管理的主要功能

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 博弈美业-收银管理功能 1、同时支持支付宝和微信支付&#xff0c;具有简单便捷安全等优点&#xff0c;并且符…

MySQL之查询性能优化(八)

查询性能优化 MySQL查询优化器的局限性 MySQL的万能"嵌套循环"并不是对每种查询都是最优的。不过还好&#xff0c;MySQL查询优化器只对少部分查询不适用&#xff0c;而且我们往往可以通过改写查询让MySQL高效地完成工作。还有一个好消息&#xff0c;MySQL5.6版本正…

Java开发注意事项

注意&#xff1a;测试类中使用Autowired注解注入Bean&#xff0c;不要使用RequiredArgsConstructor注解注入Bean 正确示范: import org.springframework.boot.test.context.SpringBootTest; import org.springframework.beans.factory.annotation.Autowired;SpringBootTest c…

Ffmpeg安装和简单使用

Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html)&#xff0c;选择 Window 然后再打开的页面中下滑找到 release builds&#xff0c;点击 zip 文件下载 环境变量配置 下载好之后解压&#xff0c;找到 bin 文件夹&#xff0c;里面有3个 .exe 文件 然后复制…

中国互联网第一人的故事__许榕生的不平凡的经历

中国互联网第一人的故事&#xff3f;&#xff3f;许榕生的不平凡的经历 目录 零 高考之际谈高考成功者 一 幸运的高考考生 二 抓住时机考研上岸 三 当年连接互联网的经过 四 互联网进入中国的缘由 五 互联网一诞生就显神威 六 互联网强国之路&#xff0c;我们在路上 零…

优思学院|六西格玛黑带官方的报考条件是什么?

经常有人私信问我六西格玛黑带证书要如何取得&#xff0c;要学历证明吗&#xff1f;要带项目吗&#xff1f;要注册吗&#xff1f; 首先&#xff0c;直接一点说&#xff0c;和任何学科一样&#xff0c;取得六西格玛证书的方法主要是通过上课学习和考试。然而&#xff0c;关于六…

fastapi实例

quick start 安装 pip install fastapi# ASGI服务器&#xff0c;生成环境可以使用uvicorn pip install uvicorn代码 from fastapi import FastAPI import uvicorn# 创建一个app实例 app FastAPI()# 编写一个路径操作装饰器 app.get("/") # 编写一个路径操作函数 …

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…

Apple开发者macOS描述文件创建

1.选择Profiles然后点击加号创建 2.选择类型为macOS App Development然后点击继续 3.选择描述类型与App ID 然后点击继续 4.选择证书然后点击继续 5.选择设备,然后点击继续 6.输入描述文件后,点击生成 生成成功,点击下载描述文件 下载完成会自动打开描述文件

评判基金的重要指标(一):最大回撤率

评判基金的重要指标&#xff08;一&#xff09;&#xff1a;最大回撤率 财富奇迹创造者2023-06-14 08:00山西 问&#xff1a;如果要投资一只基金&#xff0c;如何衡量自己可能面对的风险呢&#xff1f; 答&#xff1a;衡量一个策略的风险控制能力&#xff0c;“最大回撤”是…

Facechain系列: 通过代码进行推理

进行推理时&#xff0c;需要编辑run_inference.py中的代码。为了避免人物肖像的版权问题&#xff0c;文章中使用的图片不是由FaceChain实际生成的图片&#xff0c;特此说明。 1. 以下代码适用于Linux系统&#xff0c;如果希望在Windows系统中运行&#xff0c; folder_path f…

lm studio 0.2.24国内下载模型

1.修改C:\Users\Admin\AppData\Local\LM-Studio\app-0.2.24\resources\app\.webpack\main中的3个js文件&#xff1a; index.js llmworker.js worker.js 中替换huggingface.co为hf-mirror.com。这样就能实现搜索模型文件 2.点击模型&#xff0c;选择下载&#xff0c;出现下载…

C语言小例程6/100

题目&#xff1a;输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后再用x与z进行比较&#xff0c;如果x>z则将x与z的值…

docker安装和使用

1. docker-ce Docker Community Edition (CE): 功能: 这是 Docker 的主要组件&#xff0c;用于创建、管理和运行容器。它包括 Docker 守护进程 (dockerd)&#xff0c;该守护进程负责处理容器的生命周期&#xff0c;包括创建、启动、停止和删除容器。用途: 允许用户在其系统上…

T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy论文解读

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、引言二、文献综述1. Text-prompted Object Detection2. Visual-prompted Object Detection3. Interactive Object Detection 三、模型方法1. Visual-Text P…

Docker自定义镜像实现(SpringBoot程序为例)

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。&#x1f34e;个人主页&#xff1a;Meteors.的博客&#x1f49e;当前专栏&#xff1a;知识备份✨特色专栏&#xff1a;知识分享&#x1f96…

Java核心: 为图片生成水印

今天干了一件特别不务正业的事&#xff0c;做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人&#xff0c;手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能&#xff0c;但会把我的图片上传到他们的服务器&#xff0c;身份证太…