![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 51
AC__dream
道阻且长,行则将至;行而不辍,未来可期!
展开
-
(P1052 [NOIP2005 提高组])过河(动态规划+裴蜀定理)
题目链接:[NOIP2005 提高组] 过河 - 洛谷分析:其实很容易想到的就是设f[i]表示跳到坐标为i的位置时所踩到的最少石子数,那么显然有f[i]=min(f[i-T~i-S])+vis[i],其中vis[i]标记坐标为i的位置是否有石子,但是当我们读完数据范围后发现这样是不行的,因为数据范围是1e9,显然会超时,但是发现石子数量不是很多,所以这个时候我们就需要从石子之间的距离这个角度来对本道题目来进行优化了。假设我们每次可以走s~t步,如果s==t,那么我们只有一种走的方式,那么这样原创 2022-03-19 13:55:54 · 601 阅读 · 0 评论 -
质数距离(质数)
题目链接:196. 质数距离 - AcWing题库看到这道题的第一思路就是直接打素数表,然后直接枚举即可,但是看到l和r的范围后发现这个办法根本行不通,但是我们知道一个数x是合数,则必然存在小于x^0.5的因子,所以我们每次可以求出来小于等于r^0.5的质数,然后用这些质数把区间[l,r]中的所有数都筛一遍,这样的复杂度并不是特别高,然后直接在[l,r]中进行枚举记录答案即可,但是需要注意的一点是l和r的范围比较大,我么在记录tvis数组时,可以给其减去一个偏移量,然后就可以在给定的空间范围内进行.原创 2022-03-01 21:44:52 · 307 阅读 · 8 评论 -
(JLOI2014)聪明的燕姿(质因子爆搜)
分析:一个数的质因子分解与其约数有如下关系:所以,我们可以直接根据约数和与其质因子分解的关系来枚举每个质因子的幂次来搜索约数和等于s的数,在搜索过程中我们需要记录当前已经搜索到的数以及其约数和还有上一个幂次不为0的质因子的编号,然后我们依次往下搜索,搜索到答案就记录,但是仅仅这样搜索还是不行的,我们还需要对搜索过程进行剪枝,当我们搜索到的约数离s只差一个质因子时,我们可以直接记录答案而不用再进行向下搜索,这样会比较明显地减少代码运行的时间,具体代码如下:#include<cstdio..原创 2022-02-22 19:41:49 · 153 阅读 · 0 评论 -
最大比例
分析:为了保证所得的公比最大,首先要对原序列进行排序和去重,这个我就不细说了,我主要来说一下公比应该怎样求:假设我们排完序的序列为a1,a2,……,an那么我们可以对应的求出两两之间的比值为qi/pi,现在我们就是要求得p和q使得对于任意的两两相邻数的比值qi/pi为q/p的若干次方,而且为了使q/p尽量大,所以我们要保证若干次方尽可能小,那显然结果就是所有指数的最大公约数为1了,而且题目中保证有解,所以我们可以单独求分子和分母,最后算的次方肯定是一一对应的,现在的问题就转化为了如何求得p^x1..原创 2022-02-21 15:10:49 · 5 阅读 · 0 评论 -
(Acwing 1295)X的因子链(素数唯一分解定理)
分析:设x=p1^a1+p2^a2+……+pn^an则我们可以看作x是由ai个pi乘积得到,我们对于其质因子的不同排列顺序对应着题目中的严格递增序列(题目中的严格递增序列由质因子排列从左到右的前缀积表示),所以最大长度很简单,就是a1+a2+……+an,现在我们要求个数,这个我们由全排列公式也很容易理解就是a1+a2+……+an的全排列,但是这里面会有重复的,也就是当相邻的几个相同质因子连着的时候会出现重复,所以我们应该除以ai的全排列,这样我们就可以得到满足最大长度的序列的个数了。还需要注意的一点..原创 2022-02-18 10:01:33 · 8 阅读 · 0 评论 -
(AcWing 1246)等差数列(最大公约数)
分析:我们先将n个数进行排序,则每两个数之间的差都是公差的倍数,我们要求最短的等差序列就是要求最大的公差,所以我们只需要求出两两之差的最大公约数即可,但是需要特判一种情况,就是当公差为0时直接输出n即可。下面是代码:#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<algorithm>#include<map>..原创 2022-02-18 08:41:09 · 15 阅读 · 0 评论 -
(POJ - 2480)Longge‘s problem(欧拉函数)
题目链接:2480 -- Longge's problem题意:给定一个N,求∑gcd(i, N) 1<=i <=N分析:对于gcd(x,N)=y有gcd(x/y,N/y)=1,这两者是一一对应的,换句话说有多少个数x满足x/y与N/y互质,就有多少个gcd(x,N)=y,所以对于最大公约数gcd(x,N)=y所做的贡献就是y*o(N/y),(o代表是欧拉函数),所以我们就是要枚举N的每个因子,然后求其另一个因子的欧拉函数,最后求乘积和即可。下面是代码:#include<原创 2022-02-17 22:54:29 · 232 阅读 · 0 评论 -
(POJ - 3090)Visible Lattice Points(欧拉函数)
题目链接:3090 -- Visible Lattice Points分析:图是对称的,所以我们只需要分析不算对角线的下三角即可,最后就是下三角可以看到的点*2+对角线,现在我们来进行分析;先来分析我们在x=8这条线上可以看到的点(1,8),(3,8),(5,8),(7,8),容易发现表示坐标的两个点是互质的,当然这也比较好理解,如果不互质说明两个数有公约数,也就是说这个点其实是被前面某个点遮住的,分析到这我们就能够得出一个结论,第一次看到的点在x=t这条线上的点的纵坐标一定与t互质,既然有了这原创 2022-02-17 22:27:46 · 110 阅读 · 0 评论 -
(LightOJ - 1236)Pairs Forming LCM(素数唯一分解定理)
题目链接:Pairs Forming LCM - LightOJ 1236 - Virtual Judge中文题意:给定一个n求满足lcm(a,b)的数对个数,lcm代表最小公倍数,且(a,b)和(b,a)视为同一数对。分析:设n=p1^n1+p2^n2+……+pm^nm(m是下标)则a和b分别可以表示为a=p1^a1+p2^a2+……+pm^amb=p1^b1+p2^b2+……+bm^bm易知,若n=lcm(a,b),则有max(ai,bi)=ni,也就是说对于n的某一质因子p,a原创 2022-02-09 16:45:00 · 261 阅读 · 0 评论 -
(LightOJ - 1370)Bi-shoe and Phi-shoe(欧拉函数打表)
题目链接:Bi-shoe and Phi-shoe - LightOJ 1370 - Virtual Judge给出n个数字的序列a[],对于每个数字ai找到一个欧拉函数值大于等于ai的数bi,求找到的所有数bi的最小值之和sum(此处规定欧拉函数1的值为0)Input有T(T<=100)组数据,每组数据有两行,第一行给定n(n<=10000) 第二行给出长度为n的序列a[],ai的取值范围为[1,1000000]Output输出一个数sumSample Input3原创 2022-02-09 14:15:00 · 202 阅读 · 0 评论 -
因子个数及因子之和问题
在数论中有一个质因数分解定理,可利用其中的一些性质来求一个数的因子个数及其因子和,下面附上定理及代码。下面是代码#include<bits/stdc++.h>using namespace std;//求因子个数 int fun1(int x){ int len=sqrt(x); int ans=1; int cnt; for(int i=2;i<=len;i++) { cnt=0; whil..原创 2021-07-23 20:30:10 · 928 阅读 · 0 评论 -
欧拉函数求法及其基本应用
今天我想跟大家分享一下我对欧拉函数的理解:1∼N中与N互质的数的个数被称为欧拉函数,记为ϕ(N)。若在算数基本定理中,N=p^a1p^a2…pa^m,则:ϕ(N) =N×(p1−1)/p1×(p2−1)/p2×…×(pm−1)/pm;求法大概就是这样了,我下面将给出求单个欧拉函数的核心代码int m=n;for(int i=2;i<=sqrt(n);i++) { if(n%i==0) m=m*(i-1)/i; while(n%i==0) n/=i...原创 2021-07-23 19:56:01 · 948 阅读 · 0 评论 -
欧几里得应用及其拓展
先来介绍一下欧几里得的应用欧几里得定理主要用于求两个数的最大公约数核心等式 gcd(a,b)=gcd(b%a,a) 前提是a不等于0证明: 证明两个正数大小相等可以转换为证明这两个整数可以相互整除 先设d=gcd(a,b) 现在证明d | gcd(b%a,a) b%a=b-[b/a]*a,由于b%a是a与b的线性组合,故有d | (b%a)又因为d | a,所以gcd(a,b) |gcd(b%a,a)成立 下证gcd(b%a,a) |gcd(a,b)成立 ...原创 2021-07-23 17:37:39 · 360 阅读 · 0 评论