【算法基础】数学知识

质数

质数的判定

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.rhkb.cn/news/137898.html

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

相关文章

【数据库系统概论】数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统

数据&#xff08;data&#xff09;数据库&#xff08;DataBase, DB&#xff09;数据库管理系统&#xff08;DataBase Management System, DBMS&#xff09;数据库系统&#xff08;DataBase System, DBS&#xff09;感谢 &#x1f496; 数据&#xff08;data&#xff09; 定义&…

JavaScript小案例-树形菜单(菜单数据为数组)

菜单层级理论上可以无限多&#xff0c;因为是递归渲染。 gif演示图&#xff1a; 代码&#xff1a; 树形菜单.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

spring boot项目一次性能测试的总结

满足标准&#xff1a;并发大于等于100 &#xff0c;平均响应时间小于等于3秒 项目在压测过程中并发数只有50&#xff0c;在并发数100的情况下有很多请求链接是失败的 我们该如何入手去处理这些问题并提高并发数呢&#xff1f; 1、首先从压测结果入手&#xff0c;对不满足标准…

7.algorithm2e中while怎么使用

algorithm2e中while怎么使用 在 algorithm2e 宏包中&#xff0c;要使用 while 循环&#xff0c;您可以使用 \While 和 \EndWhile 命令来定义循环的开始和结束。以下是如何使用 while 循环的示例&#xff1a; \documentclass{article} \usepackage[linesnumbered,boxed]{algorit…

GMAC PHY介绍

1.1PHY接口发展 &#xff08;1&#xff09;MII支持10M/100Mbps&#xff0c;一个接口由14根线组成&#xff0c;它的支持还是比较灵活的&#xff0c;但是有一个缺点是因为它一个端口用的信号线太多。参考芯片&#xff1a;DP83848 、DM900A&#xff08;该芯片内部集成了MAC和PHY接…

nginx配置gzip压缩,优化传输效率,加快页面访问速度

文章目录 引言一、什么是nginx的gzip二、nginx的常用配置项三、使用示例四、浏览器查看gzip是否生效1. 判断浏览器是否支持gzip2. 判断gzip是否生效 总结 引言 在现代互联网的高速发展进程中&#xff0c;网站的访问速度愈发成为了用户选择和留存的关键。其中&#xff0c;通过g…

python小程序 图书馆图书借阅借还管理系统 mbc21

为设计一个安全便捷&#xff0c;并且使借阅者更好获取本图书借还信息&#xff0c;本文主要有安全、简洁为理念&#xff0c;实现借阅者快捷寻找图书借还信息&#xff0c;从而解决图书借还信息复杂难辨的问题。该系统以django架构技术为基础&#xff0c;采用python语言和MySQL数据…

如何从外网远程控制企业内网电脑?

在企业中&#xff0c;保护公司机密和数据安全是至关重要的。为了确保员工在使用公司电脑时遵守相关规定&#xff0c;许多公司会采取外网监控员工电脑的方法。本文将介绍一些真实有效的方法和具体的操作步骤&#xff0c;以帮助您更好地监控员工电脑。 一、什么是外网监控&#x…

Android 中集成 TensorFlow Lite图片识别

在上图通过手机的相机拍摄到的物体识别出具体的名称&#xff0c;这个需要通过TensorFlow 训练的模型引用到项目中&#xff1b;以下就是详细地集成 TensorFlow步骤&#xff0c;请按照以下步骤进行操作&#xff1a; 在项目的根目录下的 build.gradle 文件中添加 TensorFlow 的 Ma…

GitStats - 统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps&#xff0c;除了提供基础设施&#xff0c;指标和数据是也是一个很重要的一环&#xff0c;比如需要分析下某个 Git 仓库代码提交情况&#xff1a; 该仓库的代码谁提交的代码最多 该仓库的活跃度是什么样子的 各个时段的提交…

视频去LOGO的方法,AI自动完美地去除视频LOGO

喜欢做影视剧剪辑的朋友&#xff0c;可能会遇到下载的影视剧本身存在字幕、台标的情况&#xff0c;这些和新的剪辑主题不相符的原片元素&#xff0c;都会影响我们最终的成片效果。不过也无需烦恼哦&#xff0c;我们可以利用AI视频处理工具&#xff0c;自动去除视频中的logo或其…

数据结构-leetcode-移除元素

int removeElement(int* nums, int numsSize, int val){int start0;int end0;int flag0;for(int i 0;i<numsSize;i){if(nums[end]val){end;flag;}else if(nums[end]!val){nums[start]nums[end];end;start;}}return numsSize-flag; } 注&#xff1a;时间复杂度为O(N)&#xf…

Unity——对象池

对象池是一种朴素的优化思想。在遇到需要大量创建和销毁同类物体的情景时&#xff0c;可以考虑使用对象池技术优化游戏性能。 一、为什么要使用对象池 在很多类型的游戏中都会创建和销毁大量同样类型的物体。例如&#xff0c;飞行射击游戏中有大量子弹&#xff0c;某些动作游戏…

ClickHouse面向列的数据库管理系统(原理简略理解)

目录 官网 什么是Clickhouse 什么是OLAP 面向列的数据库与面向行的数据库 特点 为什么面向列的数据库在OLAP场景中工作得更好 为什么ClickHouse这么快 真实的处理分析查询 OLAP场景的关键属性 引擎作用 ClickHouse引擎 输入/输出 CPU 官网 https://clickhouse.com…

【人工智能】企业如何使用 AI与人工智能的定义、研究价值、发展阶段的深刻讨论

前言 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。 &#x1f4d5;作者简介&#x…

PLC串口通讯和通讯接口知识汇总

在使用PLC的时候会接触到很多的通讯协议以及通讯接口&#xff0c;最基本的PLC串口通讯和基本的通讯接口你都了解吗&#xff1f; 一、什么是串口通讯&#xff1f; 串口是一种接口标准&#xff0c;是计算机上一种非常通用设备通信的协议。它规定了接口的电气标准&#xff0c;没…

【C#】FileInfo类 对文件进行操作

提示&#xff1a;使用FileInfo类时&#xff0c;要引用System.IO命名空间。 using System.IO; FileInfo类 生成文件删除文件移动文件复制文件获取文件名判断文件是否存在属性列表其它常用方法 生成文件 Create()&#xff1a;在指定路径上创建文件。 FileInfo myFile new FileIn…

SOLIDWORKS Composer位置关键帧的使用

SOLIDWORKS Composer是专业的SOLIDWORKS及3D文件处理的动画制作软件&#xff0c;作为SOLIDWORKS 产品线下的一个明星存在。 SOLIDWORKS Composer几乎可以处理任何SOLIDWORKS的模型文件并将之转化成可以动作的机械动画&#xff0c;可以引用在企业的网站、产品说明书以及工作指导…

二分与前缀和

目录 &#x1f348;前言 ❤二分 &#x1f339;二分 &#x1f33c;数的范围 &#x1f33c;数的三次方根 &#x1f33c;特殊数字 &#x1f33c;机器人跳跃问题 &#x1f33c;四平方和 &#x1f33c;分巧克力 &#x1f339;前缀和 &#x1f33c;前缀和 &#x1f33c;子…

深入理解CI/CD流程:改变你的开发生命周期

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…