![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数论
文章平均质量分 76
算法与数学
陌上花开 ~
越努力,越幸运(研究生在读)
展开
-
2022牛客寒假算法基础集训营4,子序列权值乘积(枚举,欧拉降幂)
传送门思路:我们可以观察到,当排序了以后,如果确定了最大值和最小值,它们中间的数取不取对结果没有影响,因此,通过这种方式可以枚举最大值和最小值,中间的部分规约在一起,化零为整,之后枚举区间长度,对幂相同的底数进行合并,每次用逆元除掉两个数即可欧拉降幂:求 ab % pa^b\ \%\ pab % p 过程中,如果 bbb 是个比较大的数(可能是个幂的形式),可以先让 bbb 对 (p−1)(p-1)(p−1) 取模,是不影响最终答案的正确性的(前提是 aaa原创 2022-02-09 12:32:17 · 193 阅读 · 0 评论 -
牛客推组合数公式(树,小G的排列-加强版)
小G的排列-加强版思路:代码:#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int N=10000005,mod=1e9+7;ll f[N];int n,m;ll sol(int n,int m){ if(m>n) return 0; return (n-m+1)*f[n-m+1]%mod*(m>1?2:1)%原创 2021-08-22 00:57:31 · 170 阅读 · 0 评论 -
子序列宽度之和,数字1的个数(数学推公式)
子序列宽度之和给定一个整数数组 A ,考虑 A 的所有非空子序列,对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的差,返回 A 的所有子序列的宽度之和(1 <= A.length <= 20000)思路对数组从小到大排序,计算每一对(ai,aj)(a_{i},a_{j})(ai,aj)的贡献即可,设最小值为A[i]A[i]A[i] ,最大值为A[j]A[j]A[j],期望的答案为:∑j>i(2j−i−1)(Aj−Ai)\sum\limits_{j > i}原创 2021-08-04 23:50:10 · 86 阅读 · 0 评论 -
一群小青蛙呱蹦呱蹦呱(数论)
一群小青蛙呱蹦呱蹦呱传送门思路:先线性筛出7.5e77.5e77.5e7以内的所有素数,然后统计每个素数的贡献后相乘即可对于素数2而言,最大的贡献是2k∗32^k*32k∗3对于大于2的素数p而言,最大的贡献是pk∗2p^k*2pk∗2代码:#include <iostream>#include <cstdio>#include <algorithm>#include <bitset>#define mod 1000000007;usi原创 2021-07-31 23:05:37 · 99 阅读 · 0 评论 -
分解质因数(邬澄瑶的公约数,Problem J. Prime Game)
邬澄瑶的公约数我的思路:首先打一个素数表,之后对每个数分解质因数(第一个数分解完的结果直接放到目标数组里面就好),从第二个数开始,将结果存到临时数组里面,每分解完一个数,都用临时数组去更新目标数组,最后算目标数组就行我的代码:#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <queue>#include <cst原创 2021-02-20 01:43:04 · 165 阅读 · 0 评论 -
Cf-1485-C Floor and Mod(数论推公式)
C. Floor and Mod思路:代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;inline ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';c原创 2021-02-18 12:18:33 · 165 阅读 · 0 评论 -
欧拉函数+中国剩余定理入门
互质:互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。5和5不互质,因为5和5的公因数有1、5。1和任何数都成倍数关系,但和任何数都互质。因为1的因数只有1,而互质数的原则是:只要两数的公因数只有1时,就说两数是互质数。因为1只有一个因数所以1既不是质数(素数),也不是合数,无法再找到1和其他数的别的公因数了。1和-1与所有整数互素,而且它们是唯一与0互素的整数。互质数的写法:如c与m互质,则写作(c,m)=1(c,m)=1(c,m)=1原创 2020-07-25 01:52:22 · 283 阅读 · 1 评论 -
Fibonacci Numbers公式推导(数论)
题目:Fibonacci Numbers简介: 如果斐波那契数小于8位的就输出这个数,大于8位的就输出前四位,以及后四位公式部分:Fibonacci求和公式:an=15[(1+52)n−(1−52)n](a0=0,a1=1)\begin{aligned}a_{n}=\dfrac {1}{\sqrt {5}}\left[ \left( \dfrac {1+\sqrt {5}}{2}\right) ^{n}-\left( \dfrac {1-\sqrt {5}}{2}\right) ^{n}\right原创 2020-07-13 23:41:52 · 220 阅读 · 0 评论 -
Detachment(数论)
思路:先按照正常构造自然数:S=2×3×…×(n−Δx)×(n−Δx+1)×…×nS=2\times 3\times \ldots \times \left( n-\Delta x\right) \times \left( n-\Delta x+1\right) \times \ldots \times nS=2×3×…×(n−Δx)×(n−Δx+1)×…×n一般会多出一个数Δx\Delta xΔx (Δx≤n\Delta x\leq nΔx≤n)S=2×3×…×(n−Δx)×(n−Δx+2)×….原创 2020-07-07 23:48:24 · 358 阅读 · 0 评论 -
卡特兰数(含h(n)%p的卢卡斯求法)
简介:卡特兰数(Catalan number)又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。实现:递推实现(在此用Cn表示卡特兰数的项数在此用C_{n}表示卡特兰数的项数在此用Cn表示卡特兰数的项数):Cn+1=C0Cn+C1Cn+…+CnC0(C0=1,C1=1,n≥1)\begin{aligned}C_{n+1}=C_{0}C_{n}+C_{1}C_{n}+\ldots +C_{n}C_{0}\\\原创 2020-06-24 18:11:50 · 402 阅读 · 0 评论 -
求C(n,m)%p(杨辉三角,逆元,Lucas定理)
求C(n,m)%p(逆元 or Lucas定理)原创 2020-06-19 20:59:38 · 529 阅读 · 0 评论 -
质数知识(筛法,质因子分解)
埃氏筛法例题:素数思路:筛法枚举所有素数,然后vector存储每组数据答案,便于输出ac:#include<bits/stdc++.h>#define LL long long#define fo(i,a,b) for(int i=a;i<b;i++)#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)using namespace std;const int maxn=10001;int prim原创 2020-06-19 11:45:17 · 838 阅读 · 0 评论 -
扩欧(解线性同余方程)+逆元
求解线性同余方程定理1: 对于方程a * x+b * y=c,该方程等价于a * x≡c(mod b),方程有整数解的充分必要条件是:c%GCD(a,b)=0。根据定理1,对于方程a * x+b * y=c,我们可以先用扩展欧几里得算法求出一组解(x0,y0),使其满足 a * x0+b * y0=GCD(a,b)。然后两边同时除以GCD(a,b),再乘以c。这样就得到了方程a⋅x0⋅cGCD(a,b)+b⋅y0⋅cGCD(a,b)=c\dfrac {a\cdot x_{0}\cdot c}{GCD\原创 2020-06-11 15:01:19 · 740 阅读 · 0 评论