C++知识点总结(56):数学专题

数学专题

一、进制转换类

1. 模板

1.1 十转 x x x

while(n){num[++idx]=num2digit(x%i);x/=i;
}

1.2 x x x 转十

for(int i=s.size()-1;i>=0;i--){if(isdigt(s[i]))num=(num*10)+(s[i]-'0');else num=(num*10)+(10+s[i]-'A');
}

2. 例题

给定一个数 n n n 1 ≤ n ≤ 1 0 18 1\le n\le10^{18} 1n1018),求 2 ∼ 16 2\sim16 216 进制下该数是否为一个上升数(每位都满足 a i ≤ a i − 1 a_i\le a_{i-1} aiai1)。输出若干行,每行两个空格隔开的数,第一个数是对应进制,第二个数是对应进制下的上升数。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main(){cin>>n;for(int i=2;i<=16;i++){//遍历每个进制int num[55]={},idx=0,flag=0,x=n;//计算i进制下的n,存储到num[]中while(x){num[++idx]=x%i;x/=i;}//判断是否为上升数for(int i=idx-1;i>=1;i--)if(num[i]<num[i+1]){flag=1;break;}if(flag)continue;//按要求输出cout<<i<<" ";for(int i=idx;i>=1;i--)if(num[i]<10)cout<<num[i];else cout<<(char)('A'+(num[i]-10));cout<<endl;}return 0;
}

二、公式推导类

1. 一元二次方程解

已知:
a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0
则:
x = − b ± b 2 − 4 a c 2 a x = \frac{-b ± \sqrt{b^2 - 4ac}}{2a} x=2ab±b24ac
推导过程:

等式两边都 ÷ a \div a ÷a,得:
x 2 + b a x + c a = 0 x^2+\frac{b}{a}x+\frac{c}{a}=0 x2+abx+ac=0
移项,得:
x 2 + b a x = - c a x^2+\frac{b}{a}x=-\frac{c}{a} x2+abx=ac
方程两边都加上一次项系数 b a \frac{b}{a} ab 的一半的平方,即方程两边都加上 b 2 4 a 2 \frac{b^2}{4a^2} 4a2b2,(配方)得
x 2 + b a x + b 2 4 a 2 = b 2 4 a 2 - c a x^2+\frac{b}{a}x+\frac{b^2}{4a^2}=\frac{b^2}{4a^2}-\frac{c}{a} x2+abx+4a2b2=4a2b2ac
( x + b 2 a ) 2 = b 2 − 4 a c 4 a 2 x + b 2 a = ± b 2 − 4 a c 2 a x = − b ± b 2 − 4 a c 2 a (x+\frac{b}{2a})^2=\frac{b^2-4ac}{4a^2} \\ x+\frac{b}{2a}=±\frac{ \sqrt{b^2-4ac} }{2a} \\ x=\frac{-b±\sqrt{b^2-4ac}}{2a} (x+2ab)2=4a2b24acx+2ab=±2ab24ac x=2ab±b24ac

2. 例题

2.1 【模板】怪物同笼

n n n 组数据,给出第 1 1 1 种怪物有 a a a 个头 b b b 条腿,第 2 2 2 种怪物有 c c c 个头 d d d 条腿。所有怪物加起来有 e e e 个头 f f f 条腿。

思路:我们可以得出如下方程组( x x x 为怪物 1 1 1 的数量, y y y 为怪物 2 2 2 的数量):
{ a x + c y = e b x + d y = f \begin{cases} ax+cy=e \\ bx+dy=f \\ \end{cases} {ax+cy=ebx+dy=f
因此我们就推导得出 x x x 的求解公式:
a d x + c d y − b c x + c d y ( a d − b c ) x = d e − c f x = d e − c f a d − b c adx+cdy-bcx+cdy \\ (ad-bc)x=de-cf \\ x=\frac{de-cf}{ad-bc} adx+cdybcx+cdy(adbc)x=decfx=adbcdecf
以及 y y y 的求解公式:
a b x + a d y − a b x + b c y ( a d − b c ) y = a f − b e y = a f − b e a d − b c abx+ady-abx+bcy \\ (ad-bc)y=af-be\\ y=\frac{af-be}{ad-bc} abx+adyabx+bcy(adbc)y=afbey=adbcafbe

AC \text{AC} AC 代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,a,b,c,d,e,f;
signed main(){cin>>t;while(t--){cin>>a>>b>>c>>d>>e>>f;int g=d*e-c*f;int h=a*d-b*c;int i=a*f-b*e;int j=a*d-b*c;if(g%h!=0||i%j!=0||g/h<0||i/j<0){printf("No Solution\n");continue;}printf("%d %d\n",(d*e-c*f)/(a*d-b*c),(a*f-b*e)/(a*d-b*c));}return 0;
}

2.2 K K K 的倍数

给定一个长度为 n n n 的序列 a a a,求 a i − a j m o d k = 0 a_i-a_j \mod k=0 aiajmodk=0 的个数( 1 ≤ i < j ≤ n 1\le i<j \le n 1i<jn)。

暴力枚举( “ “ 差缀和 ” ” ):

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,cnt;
int a[200010];
int c[200010];
int s[200010];
signed main(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];if(i>=2){c[i]=a[i]-a[i-1];s[i]=s[i-1]+c[i];}}for(int l=2;l<=n;l++)for(int r=l;r<=n;r++)if((s[r]-s[l-1])%k==0)cnt++;cout<<cnt;return 0;
}

优化(同余思想):

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int MAXK=1e5+8;
int n,k,ans;
int cnt[MAXK];//存储j之前mod k=0,1,2,...,k-1的数分别有几个
signed main(){cin>>n>>k;for(int j=1,aj;j<=n;j++){cin>>aj;ans+=cnt[aj%k]++;}cout<<ans;return 0;
}

三、枚举

例题

1. 二次方程

s ( n ) s(n) s(n) 为正整数 n n n 的数码和,给出 a , b , c a,b,c a,b,c,求出所有满足 n = a × [ s ( n ) ] 2 + b × s ( n ) + c n=a\times[s(n)]^2+b\times s(n)+c n=a×[s(n)]2+b×s(n)+c的正整数 n n n

经典 G \text{G} G 法:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
int s(int n){int ret=0;while(n){ret+=n%10;n/=10;}return ret;
}
signed main(){cin>>a>>b>>c;for(int i=1;i<=1e7;i++)if(a*s(i)*s(i)+b*s(i)+c==i)cout<<i<<" ";return 0;
}

优化方法:
思想:反向枚举
n n n 的范围很大(不超过 9223372036854775807 9223372036854775807 9223372036854775807,我就粗略地说 1 0 20 10^{20} 1020 了)。但是 s ( n ) s(n) s(n) 最大也就 9 × 20 = 180 9\times 20=180 9×20=180。因此我们可以枚举 s ( n ) s(n) s(n),从 1 ∼ 180 1 \sim 180 1180,通过 n = a × [ s ( n ) ] 2 + b × s ( n ) + c n=a\times[s(n)]^2+b\times s(n)+c n=a×[s(n)]2+b×s(n)+c 算出 n n n,再通过 s n = S ( n ) sn = S(n) sn=S(n) 进行验算。 AC \text{AC} AC 代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
int s(int n){int ret=0;while(n){ret+=n%10;n/=10;}return ret;
}
signed main(){cin>>a>>b>>c;for(int sn=1;sn<=180;sn++){int n=a*sn*sn+b*sn+c;if(sn==s(n))cout<<n<<" ";}return 0;
}

2. 【模板】立方体体积

有一个立方体,它的长、宽、高是 a , b , c a,b,c a,b,c,立方体的体积等于长、宽、高的乘积。现在只知道立方体的体积等于 n n n,问立方体有多少种不同的可能的形状?长、宽、高顺序不同视作不同形状。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
signed main(){cin>>n;for(int a=1;a*a*a<=n;a++){//不妨令a<=b<=cif(n%a!=0)continue;for(int b=a;b*b<=n/a;b++){int c=n/a/b;if(a*b*c==n){if(a==b&&b==c)ans++;else if(a==b||b==c)ans+=3;else ans+=6;}}}cout<<ans;return 0;
}

3. 街头篮球

教练想要从他带领的 n n n 名选手中选出一支篮球队。
每名选手的能力为整数,第 i i i 名选手的能力为 a i a_i ai。篮球队的队员数量必须是 3 3 3 人,一支队伍的总能力就是所有队员能力的总和。教练比较迷信,他的幸运数字是 m m m,所以他要求队伍的总能力必须是 m m m 的倍数。请帮他算一下,符合这个要求的队伍组合有多少?

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans;
int cnt[1005];
int cal(int x,int y,int z){if(x==y&&y==z)return 1ll*cnt[x]*(cnt[x]-1)*(cnt[x]-2)/6;if(x==y)return 1ll*cnt[x]*(cnt[x]-1)/2*cnt[z];if(y==z)return 1ll*cnt[x]*cnt[y]*(cnt[y]-1)/2;return 1ll*cnt[x]*cnt[y]*cnt[z];
}
signed main(){cin>>n>>m;for(int i=1,a;i<=n;i++){cin>>a;cnt[a%m]++;}for(int i=0;i<m;i++)for(int j=i;j<m;j++){int k=(2*m-i-j)%m;if(j<=k)ans+=cal(i,j,k);}cout<<ans;return 0;
}

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

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

相关文章

【C++滑动窗口】1297. 子串的最大出现次数|1748

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 固定长度滑动窗口 LeetCode1297. 子串的最大出现次数 给你一个字符串 s &#xff0c;请你返回满足以下条件且出现次数最大的 任意 子串的出现次数&#xff1a; 子串中不同字母的数目必须小于等于 maxLetters 。…

【C++练习】使用海伦公式计算三角形面积

编写并调试一个计算三角形面积的程序 要求&#xff1a; 使用海伦公式&#xff08;Herons Formula&#xff09;来计算三角形的面积。程序需要从用户那里输入三角形的三边长&#xff08;实数类型&#xff09;。输出计算得到的三角形面积&#xff0c;结果保留默认精度。提示用户…

Python使用PDF相关组件案例详解

主要对pdfminer.six、pdfplumber、PyMuPDF、PyPDF2、PyPDF4、pdf2image、camelot-py七个PDF相关组件分别详解&#xff0c;具体使用案例演示 1. pdfminer.six pdfminer.six 是一个专门用来从 PDF 中提取文本的库&#xff0c;能够处理复杂的文本布局&#xff0c;适合用于文本解析…

计算机网络:网络层 —— 移动 IP 技术

文章目录 移动性对因特网应用的影响移动 IP 相关基本概念移动IP技术的基本工作原理代理发现与注册固定主机向移动主机发送IP数据报移动主机向固定主机发送IP数据报同址转交地址方式三角形路由问题 移动性对因特网应用的影响 我们列举如下三个应用场景说明移动性对因特网应用的…

鸿蒙多线程开发——Worker多线程

1、概 述 1.1、基本介绍 Worker主要作用是为应用程序提供一个多线程的运行环境&#xff0c;可满足应用程序在执行过程中与主线程分离&#xff0c;在后台线程中运行一个脚本进行耗时操作&#xff0c;极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。 创建Worker的线…

【大数据学习 | kafka】消费者的分区分配规则

1. 概述 上面我们提到过&#xff0c;消费者有的时候会少于或者多于分区的个数&#xff0c;那么如果消费者少了有的消费者要消费多个分区的数据&#xff0c;如果消费者多了&#xff0c;有的消费者就可能没有分区的数据消费。 那么这个关系是如何分配的呢&#xff1f; 现在我们…

Python接口自动化测试自学指南(项目实战)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广…

【Python进阶】Python网络协议与套接字编程:构建客户端和服务器

1、网络通信基础与网络协议 1.1 网络通信模型概述 网络通信是信息时代基石&#xff0c;它如同现实世界中的邮递系统&#xff0c;将数据从一处传递到另一处。其中&#xff0c;OSI七层模型与TCP/IP四层或五层模型是理解和构建网络通信的基础。 1.1.1 OSI七层模型与TCP/IP四层/…

Redis - 哨兵(Sentinel)

Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量 的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应⽤来说&#xff0c;这种⽅案是⽆法接受的&#xff0c; 于是Redis从2.8开始提…

UE5 metahuman 头发物理模拟

https://www.youtube.com/watch?vyYmdgtP6cQA 头发梳理物理 打开Unreal Engine&#xff0c;选择一个角色模型 点击“Groom”选项卡&#xff0c;在“Physics”部分下&#xff0c;找到“Custom Solver”&#xff0c;点击下拉菜单&#xff0c;选择“WindDrivenSystem”。 在“…

大数据 ETL + Flume 数据清洗 — 详细教程及实例(附常见问题及解决方案)

大数据 ETL Flume 数据清洗 — 详细教程及实例 1. ETL 和 Flume 概述1.1 ETL&#xff08;Extract, Transform, Load&#xff09;1.2 Flume 概述 2. Flume 环境搭建2.1 下载并安装 Flume2.2 启动 Flume 3. Flume 配置和常见 Source、Sink、Channel3.1 Flume Source3.2 Flume Si…

24年配置CUDA12.4,Pytorch2.5.1,CUDAnn9.5运行环境

没什么好介绍的&#xff0c;直接说了。 下载 首先打开命令行&#xff0c;输入代码查看显卡最高支持的cuda版本&#xff0c;下载的版本不要高于该版本 nvidia-smi PyTorch 插件这个是PyTorch下载地址&#xff0c;就按照我这么选CUDA版本就选最新的&#xff0c;看好绿框里的CU…

架构师备考-概念背诵(系统架构)

软件架构概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分析设计在满足所规定的需求方面的有效性:(2)在设计变…

Linux服务器软件包管理的使用

在 Linux 系统中&#xff0c;软件包管理器是用于安装、升级、删除和管理软件包的工具。不同的 Linux 发行版使用不同的软件包管理器&#xff0c;通常根据使用的包格式和包管理系统&#xff08;如 .deb 或 .rpm&#xff09;来区分。下面将介绍几种常见的 Linux 软件包管理器及其…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…

esp32s3连接控制HC-08蓝牙设备

趁双十一买了一块esp32S3单片,尝试之后发现他的蓝牙只支持ble,我的机器人以前是使用手机控制的,我想借此机会,为他添加一个esp32S3的大脑。 查了一下资料,写了一个demo,记录一下代码: #include "BLEDevice.h" //#include "BLEScan.h" //hc-08的ble…

WordPress文章自动提交Bing搜索引擎:PHP推送脚本教程

随着网站SEO优化的重要性日益增加,将新发布的内容快速提交到搜索引擎显得尤为重要。尤其对于Bing站长平台,自动化推送能让Bing尽快发现和索引我们网站的新内容。本文将详细介绍如何通过PHP脚本自动推送WordPress当天发布的文章至Bing站长平台,确保新文章被Bing及时收录。 前…

指令重排序:Java程序中的隐秘优化

什么是重排序&#xff1f; 在编写Java程序时&#xff0c;我们通常会期望代码的执行顺序与编写顺序一致。然而&#xff0c;为了优化性能&#xff0c;编译器、JVM或CPU可能会对指令的实际执行顺序进行调整&#xff0c;这种现象被称为重排序。重排序是现代计算机系统中常见的优化…

开源大模型推理引擎现状及常见推理优化方法总结

原文&#xff1a;https://zhuanlan.zhihu.com/p/755874470 前言 前一段时间sglang-v0.3.0和vllm-v0.6.0前后脚发布之后&#xff0c;就一直想总结梳理一下现在主流的大模型推理引擎。因为我觉得这也算是一个有意义的节点吧&#xff0c;从此开源大模型推理引擎总算是由"非…

【信号处理】绘制IQ信号时域图、星座图、功率谱

时域图 # 导入相关的库 import pickle import matplotlib.pyplot as plt import numpy as np from pathlib import Path import oswith open(r"C:\0-数据集\公开\RML2016\RML2016.10a_dict.pkl", rb) as file:Xd pickle.load(file, encodingbytes) snrs, mods map…