纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)

文章目录

    • 数学
      • 质因数分解
      • 辗转相除法求最大公约数
      • 最小公倍数:
      • 快速幂
      • 乘法逆元
        • 费马小定理
    • 逆元
    • 乘法逆元
      • 素数判定与埃式筛法
      • 朴素素数判定法
      • 埃式筛法
    • 图论
      • 并查集T3:真题--合根植物
      • Dijkstra
      • Floyd
    • 基础算法
      • 递归,循环,前缀和,差分
      • STL

数学

质因数分解

 int reduce(int prime[],int pn,int n,int rest[])
      {
      int i,k=0;
      for(i=0;i<pn;i++)
           {
           if (n==1) break;
           if (prime[i]*prime[i]>n) {rest[k++]=n;break;}
           while(n%prime[i]==0)
               {
               n/=prime[i];
               rest[k++]=prime[i];
               }
           }
      return k;
      }

解析:
这段代码是一个名为reduce的函数,它接受四个参数:一个整数数组prime[],一个整数pn表示数组的长度,一个整数n和一个整数数组rest[]。函数的目的是将整数n分解为质因数,并将这些质因数存储在rest[]数组中。

函数首先初始化两个变量i和k,其中i用于循环遍历prime[]数组,k用于记录rest[]数组的索引。

接下来,函数使用一个for循环遍历prime[]数组。在每次迭代中,它首先检查n是否等于1,如果是,则跳出循环。然后,它检查当前质数的平方是否大于n,如果是,则将n添加到rest[]数组中,并跳出循环。

如果当前质数的平方不大于n,则进入一个while循环。在这个循环中,只要n能被当前质数整除,就将n除以当前质数,并将当前质数添加到rest[]数组中。这个过程会一直重复,直到n不能被当前质数整除为止。

最后,函数返回k,即rest[]数组中的元素个数。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,i;
	cin>>n;
	cout<<n<<"=";
	for(i=2;i<=n;i++)
	{
		while(n!=i)
		{
			if(n%i==0)
			{
				cout<<i<<"*";
				n=n/i;
			}
			else
			break;
		}
	}
	cout<<n<<endl;
	return 0;
}

辗转相除法求最大公约数

inline int gcd(int a,int b)
{
	if(a%b==0)
	return b;
	else
	return (gcd(b,a%b));
}
  • 简单写法:
int gcb(int a,int b){
 
   return b==0 ? a:gcb(b,a%b);
 
}

最小公倍数:

int lcm(int a,int b){
		return a/gcd(a,b)*b;//防溢出 , 很妙啊 ,大家可以记一下
}

快速幂

在这里插入图片描述

  • 模板
int qmi(int a,int b,int p)//对p取模
{
	int res=1;
	while(b)//只要b不为0,就一直迭代下去 
	{
		if(b&1)res=res*a%p;//b为奇数,乘一个a到答案里
		a=a*a%p,b>>=1;//底数平方,指数除以2 
	}
	return res; 
 } 
  • 例题:数的幂次–1181
#include<bits/stdc++.h>
using namespace std;

using ll =long long;


ll qmi(ll a,ll b,ll p)//对p取模
{
	ll res=1;
	while(b)//只要b不为0,就一直迭代下去 
	{
		if(b&1)res=res*a%p;//b为奇数,乘一个a到答案里
		a=(ll)a*a%p,b>>=1;//底数平方,指数除以2 
	}
	return res; 
 } 
 int main()
 {
 	int t;
 	cin>>t;
 	while(t--)
 	{
 		ll n,m,p;cin>>n>>m>>p;
 		cout<<qmi(n,m,p)<<endl;
	 }
	 return 0;
 }

乘法逆元

费马小定理

在这里插入图片描述

逆元

在这里插入图片描述

乘法逆元

  • 例题1:求乘法逆元
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int t,n;
ll p=1e9+7;
ll qsm(ll a,ll b)
{
  ll res=1;
  while(b)
  {
    if(b&1) res=res*a%p;
    a=a*a%p;b>>=1;
  }
  return res%p;
}
ll inv(ll x)
{
  return qsm(x,p-2);
}
int main()
{
  cin>>t;
  while(t--)
  {
    cin>>n;
    cout<<inv(n)<<endl;
  }
  return 0;
}

  • 例题2:获胜的概率–3932
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p=1e9+7;
ll kmi(ll a,ll b)
{
  ll res=1;
  while(b)
  {
    if(b&1) res=res*a%p;
  a=a*a%p;b>>=1;
  }
  return res%p;
  
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  ll n,k;
  cin>>n>>k;
  if(k==0)
  {
    cout<<1<<endl;
    for(int i=2;i<=n;i++) cout<<0<<endl;
  }
  else if(k&1)
  {
    for(int i=1;i<=n;i++)
    {
      if(i&1) cout<<0<<endl;
      else cout<<kmi(n/2,p-2)<<endl;
    }
  }
  else
  {
   for(int i=1;i<=n;i++)
    {
      if(i&1) cout<<kmi((n+1)/2,p-2)<<endl;
      else cout<<0<<endl;
    }
  }

    return 0;
 }

素数判定与埃式筛法

朴素素数判定法

在这里插入图片描述

  • 例题:疑似素数-3334
#include<bits/stdc++.h>
using namespace std;
//求和
int f(int x)
{
	int res=0;
	while(x)res+=x%10,x/=10;
	return res;
 } 
bool isPrime(int n)
{
	if(n<2)return false;
	for(int i=2;i<=n/i;i++)
	{
		if(n%i==0)
		return false;
	}
	return true;
	
}
int main()
{
	int n;cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(isPrime(f(i)))ans++;
	}
	cout<<ans<<endl;
}

埃式筛法

在这里插入图片描述

bool vis[N];
vis[0]=vis[1]=true;//被筛掉了
for(int i=2;i<=n;i++)
{
	if(!vis[i])//如果i没有被筛掉,那么进行枚举
	for(int j=2*i;j<=n;j+=i)//枚举倍数 ,每次j变成i的倍数
	vis[j]=ture; 
 } 
  • 例题2:小明的素数对–3205
#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
bool shai[N];vector<int> vec;//将素数筛中杂乱的质数变成排列有序的一个集合,用vector
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  int n,ans=0;
  cin>>n;
  shai[0]=shai[1]=1;
  for(int i=2;i<=n;i++)
  {
    if(!shai[i])
    {
      vec.push_back(i);
      for(int j=2*i;j<=n;j+=i) shai[j]=1;
    }
    
  }
 
    for(int i=0;i<vec.size();i++)
    for(int j=i+1;j<vec.size();j++)
    {
      if(!shai[vec[j]-vec[i]]) ans++;
    }
    cout<<ans;

    return 0;
 }

图论

并查集T3:真题–合根植物

  • 并查集模版题:
  • 注意:不要调用string库。
  • 什么是并查集:处理不相交集合的合并问题。
  • 用途:求连通子图,求最小生成树的Kruskal算法和求最近公共祖先等。
  • 操作:
    • 初始化:
      在这里插入图片描述

    • 查询与合并:
      在这里插入图片描述

    • 查询时对路径进行压缩:
      在这里插入图片描述

    • 例题
      在这里插入图片描述

#include<cstdio>
#include<cstdlib>
using namespace std;
// 开始的时候定义数组 
#define MAXN 20001
int fa[MAXN];
//最好不要这样定义
 // 初始化
void init(int n)
{
        for(int i=0;i<=n;i++)
        fa[i]=i;
 } 
// 查询 
 int find(int x)
 {
//         递归出口
        if(x==fa[x])
        return x;
        else{
        fa[x]==find(fa[x]);
        return fa[x];
        }
 }
// 合并
void unionn(int i,int j)
{
        int i_fa=find(i);// 找到i的祖先 
        int j_fa=find(j);// 找到j的祖先 
        fa[i_fa]=j_fa ;//i的祖先指向j的祖先 
 }  
// 写主函数
int main()
{
        int m,n,x,y,q;
        scanf("%d",&n);
        init(n);// 初始化这个数组
        scanf("%d",&m); //有m行
        for(int i=1;i<=m;i++)
        {
                scanf("%d%d",&x,&y);
                unionn(x,y);
         } 
         scanf("%d",&q);// 输入q行 
         for(int i=1;i<=q;i++)
         {
                 scanf("%d%d",&x,&y);
                 if(find(x)==find(y))
                 printf("YES\n");
                 else
                 printf("NO\n");
         }

        return 0;         
 } 
  • 合根植物题解:这道题只有一个返回值,所以查询的时候注意不要增加一个返回值了。
#include<stdio.h>
int fa[1000005];
//初始化
 void init(int n)
 {
  for (int i=1;i<=n;i++)
    fa[i] = i;
 }
 // 查询
int find(int x)
{
    if (fa[x] != x)
    {
        int sx = find(fa[x]);
        fa[x] = sx;
    }
    return fa[x];
}
  // 合并
  void unionn(int i,int j)
  {
    int i_fa=find(i);
    int j_fa=find(j);
    fa[i_fa]=j_fa;
   } 
int main(void)
{
  int m,n,q;
  scanf("%d%d%d",&m,&n,&q);
  init(m*n); 
    int x,y;
  for(int i=0;i<q;i++)
  {
    scanf("%d%d",&x,&y);
    unionn(x,y);
  }
  //计数器的设置
   int ans=0;
   for(int i=1;i<=m*n;i++)
   {
    if(i==fa[i])
     {//一个数等于链条的祖先
     ans++; 
  } 
   }
  printf("%d\n",ans);
  return 0;
}

Dijkstra

在这里插入图片描述
在这里插入图片描述

Floyd

在这里插入图片描述

基础算法

递归,循环,前缀和,差分

添加链接描述

STL

添加链接描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路&#xff1a;导入基础数据操作库包&#xff0c;PCA、k-means 库包&#xff0c;数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

宝塔面板安装软件 提示需要[xxxMB]内存 强制不能安装

解决方法&#xff1a; 第一步&#xff1a; 编辑修改/www/server/panel/class/下的文件panelPlugin.py vi /www/server/panel/class/panelPlugin.py注释以下判断的内容&#xff1a; ## 第二步&#xff1a; 重启宝塔面板&#xff0c;然后安装即可 bash bt 1

HarmonyOS实战开发-如何实现对游戏实现基本控制。

介绍 本示例基于H5游戏&#xff0c;通过arkui的button实现对游戏实现基本控制&#xff0c;展示webview的JS注入与执行能力&#xff0c;及native应用与H5的通信能力。 本例的H5游戏页面&#xff0c;由https://yangyunhe369.github.io/h5-game-blockBreaker/ 提供 效果预览 使…

三子棋+迷宫

又水了一篇&#xff0c;嘿嘿不废话了&#xff0c;正文开始 文章目录 1.三子棋&#xff08;Tic-Tac-Toe&#xff09;游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

Codeforces Round 521 (Div. 3)

目录 A. Frog Jumping B. Disturbed People C. Good Array D. Cutting Out E. Thematic Contests F1. Pictures with Kittens (easy version) F2. Pictures with Kittens (hard version) A. Frog Jumping 直接模拟即可注意数据范围需要开long long void solve(){LL a,…

LeetCode-5. 最长回文子串【字符串 动态规划】

LeetCode-5. 最长回文子串【字符串 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;动态规划五部曲解题思路二&#xff1a;动态规划[版本二]解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文 子串 。 如果字符串的反序…

kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发

kubernetes应用的包管理工具—Helm的安装、部署、构建Helm Chart、分发 文章目录 kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发1. 引入Helm的原因1.1 没有使用Helm的部署1.2 使用Helm部署 2. Helm核心概念3. Helm架构3.1 V2版本3.2 V3版本 4. Helm安装…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台&#xff0c;吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条&#xff0c;不仅是对品牌形象的一种提升&#xff0c;更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱&#xff0c;这成为了许多企…

基于SpringBoot+Vue的高校会议室预定管理系统(源码+文档+部署+讲解)

一.系统概述 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套高校会议室预订管理系统&#xff0c;帮助…

【电控笔记0】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述&#xff1a; 1、在做pythonappium自动化测试时&#xff0c;使用装饰器pytest.mark.parametrize&#xff08;“参数”&#xff0c;[值1&#xff0c;值2&#xff0c;值3]&#xff09;&#xff0c;测试脚本执行返回test_xx() missing 1 required positional argument:“…

Mybatis generate xml 没有被覆盖

添加插件即可 <plugin type"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

ssm040安徽新华学院实验中心管理系统的设计与实现+jsp

实验中心管理系统 摘 要 本安徽新华学院实验中心管理系统的设计目标是实现安徽新华学院实验中心的信息化管理&#xff0c;提高管理效率&#xff0c;使得安徽新华学院实验中心管理工作规范化、科学化、高效化。 本文重点阐述了安徽新华学院实验中心管理系统的开发过程&#x…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

蓝桥杯python速成

总写C&#xff0c;脑子一热&#xff0c;报了个Python&#xff08;有一点想锤死自己&#xff09;&#xff0c;临时抱佛脚了 1.list的插入删除 append extend insert&#xff08;在索引位插入99&#xff09;---忘记用法别慌&#xff0c;用help查询 remove&#xff08;去掉第一个3…

mysql题目2

tj11: select sex,count(sex) from t_athletes group by sex; tj12: select name 姓名,TIMESTAMPDIFF(year,birthday,2024-1-1) 年龄 from t_athletes tj13: SELECT * FROM t_athletesWHERE id NOT IN (SELECT aid FROM t_match WHERE sid IN (SELECT id FROM t_sport WHE…

510天,暴雪竞品迎来大考

北京时间4月10日&#xff0c;暴雪娱乐、微软游戏与网易正式宣布重新达成合作。两则数据值得关注&#xff1a; 一是上午暴雪与网易刚宣布合作&#xff0c;中午《魔兽世界》玩家预约就超过了20W。 截图时间为中午12:48 二是在上午10:24&#xff0c;《炉石传说》官方公众号发布回…

直播视频传输处理技术

流程 在视频直播场景中&#xff0c;从拍摄到手机用户接收的整个过程涉及多个技术环节&#xff1a; 视频采集&#xff1a; 视频源通常来自摄像机或智能手机摄像头&#xff0c;通过捕捉连续的画面生成原始视频信号。 编码压缩&#xff1a; 为了减少数据量以适应网络传输&#x…

一个比 Celery 轻量好用的异步任务工具

文章目录 1、RQ安装2、RQ基本概念2.1、Queue2.2、Job2.3、Worker 3、RQ 高级用法3.1、自定义任务失败处理3.2、任务依赖关系3.3、定时任务 4、RQ web 界面5、查看任务结果6、RQ 与 celery 对比7、总结 Python RQ&#xff08;Redis Queue&#xff09;是一个轻量级的异步任务队列…

c++取经之路(其五)——类和对象拷贝构造函数

概念&#xff1a;拷贝构造函数&#xff0c;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 特征&#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式 如&#xff1a; 2. 拷贝…