蓝桥杯:C++模运算、快速幂

模运算

模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。

模是英文mod的音译,取模实际上是求余。

取模运算一般要求a和m的符号一致,即都为正数或都为负数。如果正负不同,那么请小心处理。

取模操作的加、减、乘满足分配律,注意此时仍要求a+b、a−b、a×b为正数,如果有负数,请小心处理。

例题1.刷题统计

2022年(第十三届)省赛,lanqiaoOJ题号2098

这题用暴力法很好解,但是只能拿到60的测试数据,差不多对一半吧。

暴力法代码:

#include <iostream>
using namespace std;
int main()
{// 请在此输入您的代码long long a,b,n;  //要用long long cin >> a >> b >> n;long long sum = 0,day = 0;  //定义做题数和天数while(sum < n){day++;if(day % 7 == 6 || day % 7 == 0) sum+=b;//周六周日else sum+=a;//周一到周五}cout << day;return 0;   //暴力法通过60,后面运行超时,这个是意料之中的。
}

放在取模题中,这也是一道取模的简单题,利用取模操作把计算复杂度降为O(1)。

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{long long a,b,n;cin >> a >> b >> n;long long sum=5*a+2*b;//一周总数long long day=7*(n/sum);//总数除以一周总数乘以一周7天n=n%sum;//剩余题目long long d[]={a,a,a,a,a,b,b},i;//设立周数组for(i=0;n>0;i++)  {//当n=0时,就已经满足大于等于n,这个时候的天数就是答案n-=d[i];day++;}cout << day; return 0;
}

快速幂

int fastPow(int a, int n) {    //快速幂 int ans = 1;               //用ans返回结果,初始化为1,不能初始化为0while(n) {                 //把n看成二进制数,逐个处理它的最后一位if(n & 1)   ans *= a;  //如果n的最后一位是1,则表示这个地方需要参与计算a *= a;                //递推:a2 --> a4 --> a8--> a16-->…n >>= 1;               //n右移一位,把刚处理过的n的最后一位去掉}return ans;                //结果
}

例题1.快速幂

套模板即可,代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;                      //变量改用较大的long long型
ll fastPow(ll a, ll n, ll mod) {ll ans = 1;a %= mod;                             //非常重要,防止下面的ans*a越界while(n) {if(n & 1)   ans = (ans*a) % mod;   //取模a = a*a % mod;                     //取模n >>= 1;}return ans;       					   //输出结果 
}
int main() {ll b,p,k;cin>>b>>p>>k;cout << fastPow(b,p,k);return 0;
}

矩阵乘法

矩阵的加减法很简单,把两个矩阵对应位置的元素进行加减即可得到结果。

矩阵乘法:

for(int i=1; i<=m; i++)     //注:i、j、k的先后顺序不重要,因为对于c[][]来说都一样for(int j=1; j<=u; j++)for(int k=1; k<=n; k++)c[i][j] += a[i][k] * b[k][j]);

根据矩阵乘法的定义,可以推出下面两个式子。

例题1.矩阵相乘

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100;
int n,m,k;
int A[N][N],B[N][N],C[N][N];
int multi(int  u, int v) {int sum = 0;for (int j=0; j<m; j++)  sum += (A[u][j] * B[j][v]);return sum;
}
int main() {cin >> n >> m >> k;for(int i=0; i<n; i++)for(int j=0; j<m; j++)    cin >> A[i][j];for(int i=0; i<m; i++)for(int j=0; j<k; j++)    cin >> B[i][j];for(int i=0; i<n; i++)for(int j=0; j<k; j++)    C[i][j] = multi(i, j);for(int i=0; i<n; i++) {for(int j=0; j<k; j++)    cout << C[i][j] << " ";cout << endl;}return 0;
}

GCD和LCM

最大公约数(Greatest Common Divisor,GCD)和最小公倍数(the Least Common Multiple,LCM)。

编程时可以不用自己写GCD代码,而是直接使用库函数。

C++的库函数__gcd()。

__gcd();   //shift  + -,输出_     注意是两个下划线,所以要操作两次shift+-

库函数__gcd()可能会返回负数,见下面的例子。

#include<bits/stdc++.h>
using namespace std;
int main() {cout<<__gcd(15, 81)<< endl;    //输出  3cout<<__gcd(0, 44)<< endl;     //输出  44cout<<__gcd(0, 0)<< endl;      //输出  0cout<<__gcd(-6, -15)<< endl;   //输出  -3cout<<__gcd(-17,289)<< endl;   //输出  -17cout<<__gcd(17,-289)<< endl;   //输出  17return 0;
}

LCM:

gcd(a, b)×lcm(a, b) = a×b,即lcm(a, b) = a×b/gcd(a, b) =a/gcd(a, b) ×b。

例题1.等差数列

解析:

代码: 

#include<bits/stdc++.h>
using namespace std;
int a[100000];
int main() {int n;cin>>n;for(int i=0; i<n; i++)   cin>>a[i];sort(a,a+n);int d=0;for(int i=1; i<n; i++)   d = __gcd(d,a[i]-a[i-1]);    //以{2,5,7}为例if(d==0) cout<<n<<endl;    //公差为0,直接输出n就行else     printf("%d\n",(a[n - 1] - a[0]) / d + 1); return 0;
}

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

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

相关文章

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…

【超级干货】ArcGIS_空间连接_工具详解

帮助里对空间连接的解释&#xff1a; 根据空间关系将一个要素的属性连接到另一个要素。 目标要素和来自连接要素的被连接属性写入到输出要素类。 如上图所示&#xff0c;关键在于空间关系&#xff0c;只有当两个要素存在空间关系的时候&#xff0c;空间连接才有用武之地。 一…

方式0控制流水灯循环点亮

#include<reg51.h> //包含51单片机寄存器定义的头文件 #include<intrins.h> //包含函数_nop_&#xff08;&#xff09;定义的头文件 unsigned char code Tab[]{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码&#xff0c;该数组被定义为全局变量 sbit…

《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托&#xff08;Session Interface Delegates&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xf…

2.12日学习打卡----初学RocketMQ(三)

2.12日学习打卡 目录&#xff1a; 2.12日学习打卡一. RocketMQ高级特性&#xff08;续&#xff09;消息重试延迟消息消息查询 二.RocketMQ应用实战生产端发送同步消息发送异步消息单向发送消息顺序发送消息消费顺序消息全局顺序消息延迟消息事务消息消息查询 一. RocketMQ高级特…

红蓝对抗:网络安全领域的模拟实战演练

引言&#xff1a; 随着信息技术的快速发展&#xff0c;网络安全问题日益突出。为了应对这一挑战&#xff0c;企业和组织需要不断提升自身的安全防护能力。红蓝对抗作为一种模拟实战演练方法&#xff0c;在网络安全领域得到了广泛应用。本文将介绍红蓝对抗的概念、目的、过程和…

【精品】关于枚举的高级用法

枚举父接口 public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** param code* param clazz* return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonN…

ASCII编码的诞生:解决字符标准化与跨平台通信的需求

title: ASCII编码的诞生&#xff1a;解决字符标准化与跨平台通信的需求 date: 2024/2/17 14:27:01 updated: 2024/2/17 14:27:01 tags: ASCII编码标准化跨平台字符集兼容性简洁性影响力 在计算机的发展过程中&#xff0c;字符的表示和传输一直是一个重要的问题。为了实现字符的…

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui

文章目录 用GUI自动控制键盘和鼠标pyautogui 模块鼠标——记忆宫殿屏幕位置——移动地图——pyautogui.size鼠标位置——自身定位——pyautogui.position()移动鼠标——pyautogui.moveTo拖动鼠标——滚动鼠标——scroll 键盘按下键盘释放键盘 开始与结束通过注销关闭所有程序 用…

linux系统zabbix监控分布式监控的部署

分布式监控 服务器安装分布式监控安装工具安装mysql导入数据结构配置proxy端浏览器配置 zabbix server端监控到大量zabbix agent端&#xff0c;这样会使zabbix server端压力过大&#xff0c;使用zabbix proxy进行分布式监控 服务器安装分布式监控 安装工具 rpm -Uvh https://…

HTML | DOM | 网页前端 | 常见HTML标签总结

文章目录 1.前端开发简单分类2.前端开发环境配置3.HTML的简单介绍4.常用的HTML标签介绍 1.前端开发简单分类 前端开发&#xff0c;这里是一个广义的概念&#xff0c;不单指网页开发&#xff0c;它的常见分类 网页开发&#xff1a;前端开发的主要领域&#xff0c;使用HTML、CS…

网络安全威胁,如何解决缓冲区溢出攻击

目录 一、什么是网络安全 二、什么是缓冲区 三、缓冲区溢出 四、缓冲区溢出攻击的类型 一、什么是网络安全 网络安全&#xff08;Network Security&#xff09;指的是保护计算机网络及其相关设备、系统和数据免受未经授权访问、破坏、篡改、窃取或滥用的威胁和攻击。随着网…

单片机学习笔记---LCD1602

LCD1602介绍 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff08;比如日文的片假名&#xff09;&#xff0c;还可以有8个自定义字符 显示容量&#xff1a;…

linux系统zabbix工具监控web页面

web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度&#xff0c;及页面响应时间&#xff0c;还有响应代码&#xff1b; web Scenario&#xff1a; web场景&#xff08;站点&#xff09;web page &#xff1a;web页面&#xff0c;一个场景有多…

Excel TEXT函数格式化日期

一. 基本语法 ⏹Excel 的 TEXT 函数用于将数值或日期格式化为指定的文本格式 TEXT(value, format_text)二. 拼接路径案例 # 将当前单元格日期格式化 "ls -ld /data/jmw/01/"&TEXT(A2,"YYYYMMDD")&""# 此处的日期, 是名称管理器里面定…

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中&#xff0c;页面路由&#xff08;Router&#xff09;机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由&#xff0c;揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…

【每日一题】06 排序链表

问题描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 求解 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* sortList(struct ListNode* head) {struct…

什么是 Flet?

什么是 Flet&#xff1f; Flet 是一个框架&#xff0c;允许使用您喜欢的语言构建交互式多用户 Web、桌面和移动应用程序&#xff0c;而无需前端开发经验。 您可以使用基于 Google 的 Flutter 的 Flet 控件为程序构建 UI。Flet 不只是“包装”Flutter 小部件&#xff0c;而是…

【数学建模】【2024年】【第40届】【MCM/ICM】【A题 七鳃鳗性别比与资源可用性】【解题思路】

我们通过将近半天的搜索数据&#xff0c;查到了美国五大湖中优势物种的食物网数据&#xff0c;以Eric伊利湖为例&#xff0c;共包含34各优势物种&#xff0c;相互之间的关系如下图所示&#xff1a; 一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem A: Reso…

【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…