【算法基础】数学知识

质数

质数的判定

866. 试除法判定质数 - AcWing题库

时间复杂度是logN

#include<bits/stdc++.h>
using namespace std;
int n;
bool isprime(int x)
{if(x<2) return false;for(int i=2;i<=x/i;i++){if(x%i==0) return false;}return true;
}
signed main()
{cin>>n;	for(int i=1;i<=n;i++){int x;cin>>x;if(isprime(x)) puts("Yes");else puts("No");}return 0;
} 

分解质因数 

867. 分解质因数 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
int n;
void divide(int x)
{for(int i=2;i<=x/i;i++){if(x%i==0) {int s=0;while(x%i==0) x/=i,s++;cout<<i<<" "<<s<<endl;}}if(x>1) cout<<x<<" "<<1<<endl;cout<<endl;
}
signed main()
{cin>>n;	for(int i=1;i<=n;i++){int x;cin>>x;divide(x);}return 0;
} 

 筛质数(用线性筛,O(N)

 868. 筛质数 - AcWing题库

朴素版,埃氏筛法

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
bool st[N];
int prime[N],cnt;
int n;
void getprimes(int x)
{for(int i=2;i<=x;i++){if(st[i]) continue;prime[cnt++]=i;for(int j=i+i;j<=x;j+=i) st[j]=true;}}
signed main()
{cin>>n;	getprimes(n);cout<<cnt;return 0;
} 

 线性筛

868. 筛质数 - AcWing题库

线性筛把时间复杂度优化到O(n),就需要保证筛去一个数只用一次,保证最小质因数就可以确保这一点。

如。筛去24,24=2*12,24=3*8,显然这里2是最小质因数,如何确保不筛去3*8?

这里3*8=3*2*4,即i包含上一个prime,直接break。

只要i包含了prime就不能保证最小质因数!!

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
bool st[N];
int prime[N],cnt;
int n;
void getprimes(int x)
{for(int i=2;i<=x;i++){if(!st[i]) prime[cnt++]=i;for(int j=0;prime[j]<=x/i;j++){st[prime[j]*i]=true;if(i%prime[j]==0) break;}}}
signed main()
{cin>>n;	getprimes(n);cout<<cnt;return 0;
} 

约数

试除法求一个数的所有约束

869. 试除法求约数 - AcWing题库

#include<bits/stdc++.h>
using namespace std;void solve(int x)
{stack<int> s;for(int i=1;i<=x/i;i++){if(x%i==0) {cout<<i<<' ';if(i!=x/i) s.push(x/i);}}while(s.size()){cout<<s.top()<<" ";s.pop();}puts("");
}
signed main()
{int n;cin>>n;while(n--){int x;cin>>x;solve(x);}return 0;
} 

 约数个数//约数之和

870. 约数个数 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long LL;
signed main()
{int n;cin>>n;unordered_map<int,int> mp;while(n--){int x;cin>>x;for(int i=2;i<=x/i;i++){while(x%i==0){mp[i]++;x/=i;}}if(x>1) mp[x]++;}LL res=1;for(auto p:mp) res=res*(p.second+1)%mod;cout<<res<<endl; return 0;
} 

 871. 约数之和 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long LL;
signed main()
{int n;cin>>n;unordered_map<int,int> mp;while(n--){int x;cin>>x;for(int i=2;i<=x/i;i++){while(x%i==0){mp[i]++;x/=i;}}if(x>1) mp[x]++;}LL res=1;for(auto p:mp){LL a=p.first,b=p.second;LL t=1;while(b--) t=(t*a+1)%mod;//秦九韶res=res*t%mod; }cout<<res<<endl; return 0;
} 

最大公约数

872. 最大公约数 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
int gcb(int a,int b)
{return b?gcd(b,a%b):a;
}
signed main()
{int n;cin>>n;while(n--){int a,b;cin>>a>>b;cout<<gcd(a,b)<<endl; }return 0;
} 

 
欧拉函数 

求任意一数的欧拉函数  O(n*sqrt(a)) 

 873. 欧拉函数 - AcWing题库

 

#include<bits/stdc++.h>
using namespace std;signed main()
{int n;cin>>n;while(n--){int x;cin>>x;int res=x;for(int i=2;i<=x/i;i++){if(x%i==0){res=res/i*(i-1);while(x%i==0) x/=i;} }if(x>1) res=res/x*(x-1);cout<<res<<endl;}return 0;
} 

求1-n中每个数的欧拉函数  O(n)

874. 筛法求欧拉函数 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int prime[N],cnt;
bool st[N];
int phi[N];//欧拉函数typedef long long LL; 
signed main()
{int n;cin>>n;phi[1]=1;for(int i=2;i<=n;i++){if(!st[i]) {prime[cnt++]=i;phi[i]=i-1;//质数的欧拉函数 }for(int j=0;prime[j]<=n/i;j++){st[prime[j]*i]=true;if(i%prime[j]==0) {phi[prime[j]*i]=prime[j]*phi[i];         //括号里质因子是一样的,只是n要多乘上一个 break;}phi[prime[j]*i]=phi[i]*(prime[j]-1); //prime是质数且i不能整除prime,则说明两数没有公因数//那么prime[j]*i比i只是多了一个质因子prime[j] }}LL res=0;for(int i=1;i<=n;i++) res+=phi[i];cout<<res;return 0;
}

 快速幂

快速幂

875. 快速幂 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL qmi(int a,int b,int p)
{LL res=1%p;while(b){if(b&1) res=res*(LL)a%p;a=a*(LL)a%p;b>>=1;}return res;	
}
signed main()
{int n;	cin>>n;while(n--){int a,b,p;cin>>a>>b>>p;cout<<qmi(a,b,p)<<endl;	}return 0;
} 

快速幂求逆元

876. 快速幂求逆元 - AcWing题库

(1)当a与p互质时,用快速幂求逆元(费马小定理):quick_power(a, b, p);
(2)当a与p不互质时,用扩展欧几里得算法求逆元:exgcd(a, p, x, y)。

概念: 

 证明:费马小定理(通俗易懂) - 知乎 (zhihu.com)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL qmi(int a,int b,int p)
{LL res=1%p;while(b){if(b&1) res=res*(LL)a%p;a=a*(LL)a%p;b>>=1;}return res;	
}
signed main()
{//当a和p不互质时无解,由于p是质数,也就只有a是p的倍数时无解 int n;	cin>>n;while(n--){int a,b,p;cin>>a>>p;if(a%p==0) puts("impossible"); else cout<<qmi(a,p-2,p)<<endl;	}return 0;
} 

 扩展欧几里得算法

扩展欧几里得算法

877. 扩展欧几里得算法 - AcWing题库

主要是递归。先正着求出gcd的值,求完之后倒着求x,y。

AcWing 877. 扩展欧几里得算法 - AcWing

#include<bits/stdc++.h>
using namespace std;int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1,y=0;return a;	}	int x1,y1,gcd;gcd=exgcd(b,a%b,x1,y1);x=y1,y=x1-a/b*y1;return gcd;
}signed main()
{int n;cin>>n;while(n--){int a,b,x,y;cin>>a>>b;exgcd(a,b,x,y);cout<<x<<" "<<y<<endl;}return 0;
}

 线性同余方程

878. 线性同余方程 - AcWing题库

想不明白主要应该是不太清楚裴属定理,看这个:裴蜀定理 - OI Wiki (oi-wiki.org)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1,y=0;return a;	}	int x1,y1,gcd;gcd=exgcd(b,a%b,x1,y1);x=y1,y=x1-a/b*y1;return gcd;
}signed main()
{int n;cin>>n;while(n--){int a,b,m;cin>>a>>b>>m;int x,y;int d=exgcd(a,m,x,y);if(b%d) puts("impossible");else cout<<(LL)b/d*x%m<<endl;}return 0;
}

 中国剩余定理

204. 表达整数的奇怪方式 - AcWing题库

基础中国剩余定理:算法学习笔记(10): 中国剩余定理 - 知乎 (zhihu.com)

好难,明天再看

高斯消元法

883. 高斯消元解线性方程组 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N=110;
const double eps = 1e-8; 
int n;
double a[N][N];int gauss()  // 高斯消元,答案存于a[i][n]中,0 <= i < n
{int c,r;//列,行for(c=0,r=0;c<n;c++)//遍历所有列 {int t=r;//最上面一个,还没确定for(int i = r ; i < n ; i ++){if( fabs(a[i][c]) > fabs(a[t][c]) ) t=i;//把最大的换上去 }	if(fabs(a[t][c])<eps) continue;//如果这个最小的是0,跳过 for(int i=c;i<=n;i++)	swap(a[t][i],a[r][i]);//交换 for(int i=n;i>=c;i--) a[r][i]/=a[r][c]; //首位变成1 for(int i=r+1;i<n;i++){if(fabs(a[i][c])>eps){for(int j=n;j>=c;j--){a[i][j]-=a[r][j]*a[i][c];	}	}} r ++ ;}if(r<n){for(int i=r;i<n;i++)//从没走到的一行开始{if(fabs(a[i][n])>eps) return 2;//无解 }return 1; //无穷解 }//只有一解for(int i=n-1;i>=0;i--){for(int j=i+1;j<n;j++){a[i][n]-=a[i][j]*a[j][n];}} return 0;
}signed main()
{cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n+1;j++){cin>>a[i][j];		}}	int t=gauss();if (t == 2) puts("No solution");else if (t == 1) puts("Infinite group solutions");else{for (int i = 0; i < n; i ++ )printf("%.2lf\n", a[i][n]);}return 0;
} 

从1开始存的版本。

#include<bits/stdc++.h>
using namespace std;
const int N=110;
const double eps=1e-8;
int n;
double a[N][N];int gauss()
{int r=1,c=1;//行列,r<=n,c<=n+1for(r=1,c=1;c<=n;c++) //遍历每一列 {int t=r;//记录行 for(int i=t;i<=n;i++){if(fabs(a[i][c]>fabs(a[t][c])))	t=i;	}if(fabs(a[t][c])<eps) continue;//走了几列同时代表确定了几行 for(int i=c;i<=n+1;i++)	swap(a[t][i],a[r][i]);for(int i=n+1;i>=c;i--) a[r][i]/=a[r][c];for(int i=r+1;i<=n;i++)//对每一行 {if(fabs(a[i][c])<eps) continue;//如果这个是0,不操作for(int j=n+1;j>=c;j--){a[i][j]-=a[r][j]*a[i][c];	} } r++;}if(r<n+1){for(int i=r;i<=n;i++){if(fabs(a[i][n+1])>eps) return 0;//无解 }return 2;//无穷解 }for(int i=n-1;i>=1;i--){for(int j=i+1;j<=n+1;j++){a[i][n+1]-=a[j][n+1]*a[i][j];	}	} return 1;
}
signed main()
{cin>>n;	for(int i=1;i<=n;i++){for(int j=1;j<=n+1;j++){cin>>a[i][j];}}int t=gauss();if(t==0) puts("No solution");else if(t==2) puts("Infinite group solutions");else{for(int i=1;i<=n;i++) printf("%.2lf\n",a[i][n+1]);}return 0;
}

884. 高斯消元解异或线性方程组 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N=110;int n;
int a[N][N];void guass()
{int r,c;for(r=1,c=1;c<=n;c++)//枚举列 {int t=r;for(int i=r;i<=n;i++){if(a[i][c]){t=i;break;}	}if(a[t][c]==0) continue;//说明第c列都是0 for(int i=c;i<=n+1;i++) swap(a[r][i],a[t][i]);for(int i=r+1;i<=n;i++){if(a[i][c]==0) continue;for(int j=c;j<=n+1;j++){a[i][j]^=a[r][j];	}	} r++;}if(r<n+1)//说明等式左边都是0,判断等式右边即可 {for(int i=r;i<=n;i++){if(a[i][n+1]!=0)//无解 {puts("No solution");return; }} puts("Multiple sets of solutions");return;}//输出结果for(int i=n-1;i>=1;i--){for(int j=i+1;j<=n+1;j++){a[i][n+1]^=a[i][j]*a[j][n+1];	}	} for(int i=1;i<=n;i++){cout<<a[i][n+1]<<endl;}
}
signed main()
{cin>>n; for(int i=1;i<=n;i++){for(int j=1;j<=n+1;j++){cin>>a[i][j];}}guass();	return 0;
}

求组合数

885. 求组合数 I - AcWing题库

1<=b<=a<=2000

#include<bits/stdc++.h>
using namespace std;
const int N=2010,mod=1e9+7;
int a[N][N];void init()
{for(int i=0;i<N;i++){for(int j=0;j<=i;j++){if(j==0) a[i][j]=1;else a[i][j]=(a[i-1][j]+a[i-1][j-1])%mod;}}
}
signed main()
{init();int n;cin>>n;while(n--){int c,b;cin>>c>>b;cout<<a[c][b]<<endl;}return 0;
}

 886. 求组合数 II - AcWing题库

1<=b<=a<=1e5

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10,mod=1e9+7;int fact[N],infact[N];
int qmi(int a,int k,int p)
{int res=1;while(k){if(k&1) res=(LL)res*a%p;a=(LL)a*a%p;k>>=1;}return res;
}
signed main()
{fact[0]=infact[0]=1;for(int i=1;i<N;i++){fact[i]=(LL)fact[i-1]*i%mod;infact[i]=(LL)infact[i-1]*qmi(i,mod-2,mod)%mod; }int n;	cin>>n;while(n--){int a,b;cin>>a>>b;cout<<(LL)fact[a]*infact[b]%mod*infact[a-b]%mod<<endl;}return 0;
}

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

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

相关文章

SpringBoot+MyBatisPlus+MySQL不能储存(保存)emoji表情问题解决

1.之前在学习过程中不知道utf8和utf8mb4的区别&#xff0c;也没过多去了解&#xff0c;直到最近设置的数据库编码全是utf8后发现问题所在了&#xff0c;居然不能储存表情包&#xff01;&#xff01;&#xff01;整个人直接傻了&#xff0c;后面知道了utf8是3字节不能储存表情&a…

SadTalker 让图片说话

参考&#xff1a;https://github.com/OpenTalker/SadTalker 其他类似参考&#xff1a;https://www.d-id.com/ 输入图片加音频产生2d视频 安装使用 1、拉取github&#xff0c;下载对应安装库 2、下载对应模型baidu网盘 新建checkpoints&#xff0c;把下载sadtalker里模型拷贝进…

如何在Gazebo中实现多机器人编队仿真

文章目录 前言一、仿真前的配置二、实现步骤1.检查PC和台式机是否通讯成功2.编队中对单个机器人进行独立的控制3、对机器人进行编队控制 前言 实现在gazebo仿真环境中添加多个机器人后&#xff0c;接下来进行编队控制&#xff0c;对具体的实现过程进行记录。 一、仿真前的配置…

JAVAEE初阶相关内容第十二弹--多线程(进阶)

目录 一、JUC的常见类 1、Callable接口 1.1callable与runnable 1.2代码实例 &#xff08;1&#xff09;不使用Callable实现 &#xff08;2&#xff09;使用Callable实现 1.3理解Callable 1.4理解FutureTask 2、ReentrantLock 2.1ReentrantLock的用法 2.2ReentrantLoc…

【面试题】Js数组去重都有哪些方法?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 1. indexOf 定义&#xff1a; indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置…

springboot整合sentinel完成限流

1、直入正题&#xff0c;下载sentinel的jar包 1.1 直接到Sentinel官网里的releases下即可下载最新版本&#xff0c;Sentinel官方下载地址&#xff0c;直接下载jar包即可。不过慢&#xff0c;可能下载不下来 1.2 可以去gitee去下载jar包 1.3 下载完成后&#xff0c;进行打包…

【办公小神器】:快速批量转换Word、Excel、PPT为PDF脚本!

文章目录 ✨哔哩吧啦✨脚本使用教程✨温馨小提示设置&#x1f4da;资源领取 专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&#x1f525;Python数据分析Django基础入门宝典&#x1f525;小玩意儿&#x1f525;Web前端学习tkinter学习笔记Excel自动化处理 ✨哔哩吧啦 前…

[pai-diffusion]pai的easynlp的clip模型训练

EasyNLP带你玩转CLIP图文检索 - 知乎作者&#xff1a;熊兮、章捷、岑鸣、临在导读随着自媒体的不断发展&#xff0c;多种模态数据例如图像、文本、语音、视频等不断增长&#xff0c;创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容&#xff0c;跨模态检索是跨模态…

Ctfshow web入门 代码审计篇 web301-web310 详细题解 全

CTFshow 代码审计 web301 下载的附件的目录结构如下&#xff1a; 开题后界面&#xff0c;看见输入框&#xff0c;感觉是sql。 大概浏览一遍源码&#xff0c;我们可以发现在checklogin.php文件中有无过滤的SQL语句&#xff0c;SQL注入没得跑了。 这题SQL注入有三种做法。 方法一…

Linux:GlusterFS 集群

GlusterFS介绍 1&#xff09;Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储. 2&#xff09;Glusterfs通过TCP/IP或InfiniBand RDMA网络链…

Everything + Cpolar,打造在线搜索的终极神器

文章目录 前言1. 下载安装注册cpolar2. Everything安装和设置2.1 进入Everything官网进行下载2.2 对Everything文件进行设定 3. 创建cpolar内网穿透隧道4. 公网访问测试Everything5. 固定连接公网地址 前言 你还在用Windows资源管理器自带的搜索工具来搜索文件吗&#xff1f;这…

轮换对称性

二重积分 普通对称性–D关于 y x yx yx对称&#xff1a; ∬ D f ( x , y ) d σ { 2 ∬ D 1 f ( x , y ) d σ f ( x , y ) f ( y , x ) 0 f ( x , y ) − f ( y , x ) \iint_{D}f(x,y)d\sigma\begin{cases} 2\iint_{D_1}f(x,y)d\sigma\ \ \ \ \ \ f(x,y)f(y,x) \\ 0 \ \…

OpenStack创建云主机并连接CRT

文章目录 OpenStackT版创建云主机并连接CRT命令行操作&#xff08;1&#xff09;创建镜像&#xff08;2&#xff09;创建实例&#xff08;3&#xff09;创建网络创建内网创建外网 &#xff08;4&#xff09;创建安全组&#xff08;5&#xff09;创建路由&#xff08;6&#xff…

1952-2018年中国各省份人均GDP数据(消涨处理)

1952-2018年中国各省份人均GDP数据&#xff08;消涨处理&#xff09; 1、时间&#xff1a;1952-2018年 2、范围&#xff1a;30省市 3、指标&#xff1a;人均GDP 4、来源&#xff1a;《新中国60周年统计汇编》和各省年鉴 5、指标解释&#xff1a; 过程为环比人均GDP指数转…

YSA Toon (Anime/Toon Shader)

这是一个Toon着色器/Cel阴影着色器,用于Unity URP 此着色器的目的是使角色或物体阴影实时看起来尽可能接近真实的动画或卡通效果 可以用于游戏,渲染,插图等 着色器特性,如:面的法线平滑、轮廓修复、先进的边缘照明、镜面照明、完全平滑控制 这个文档包括所有的功能https:/…

Eclipse ABAP ADT 集成详细安装教程

最近看到网上有个源码使用CDS做的&#xff0c;然后看了一下原来还可以用eclipse&#xff0c;趁热打铁&#xff0c;试了一把&#xff0c;最后成功了&#xff0c;中间可能会有一些报错&#xff0c;可以自己慢慢解决&#xff0c;大概就是这样的。 SAP的开发&#xff0c;有三种开发…

Java————List

一 、顺序表和链表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c; 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…

微信小程序与idea后端如何进行数据交互

交互使用的其实就是调用的req.get(url)方法 进行路径访问&#xff0c;你要先保证自己的springboot项目已经成功运行了&#xff1a; 如下&#xff1a; 如何交互的&#xff1f; 微信小程序&#xff1a;如下为index.js页面 在onLoad()事件中调用方法Project.findAllCities() 要…

贝叶斯滤波计算4d毫米波聚类目标动静属性

机器人学中有些问题是二值问题&#xff0c;对于这种二值问题的概率评估问题可以用二值贝叶斯滤波器binary Bayes filter来解决的。比如机器人前方有一个门&#xff0c;机器人想判断这个门是开是关。这个二值状态是固定的&#xff0c;并不会随着测量数据变量的改变而改变。就像门…

rv1126-rv1109-test

测试指令 播放音频:aplay aigei.wav 测试时间: 查看系统时间:date 设置时间:date -s "2023-09-21 16:00:00" 设置芯片时间:hwclock -w 查看芯片时间:hwclock 测试背光: echo 0 > sys/class/backlight/backlight/brightness echo 50 > sys/class/backlig…