![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 59
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
UVA12716 GCD等于XOR GCD XOR 数论
link题意:给定n求∑i=1n∑j=in[i⊕j==gcd(i,j)] n<=3e7\sum_{i=1}^n \sum_{j=i}^{n} {[i\oplus j==\gcd(i,j)]} ~~~~~n<=3e7∑i=1n∑j=in[i⊕j==gcd(i,j)] n<=3e7思路:有个结论,就是i⊕j>=i−j>=gcd(i,j)i \oplus原创 2021-10-21 22:45:56 · 221 阅读 · 0 评论 -
探索bsgs/exbsgs
众所周知bsg是处理ax≡b(modp)求最小的幂次如果(a,p)=1我们可以发现ax≡ax%ϕ(p)那么只需要开一个p的块先预处理出来p的余数,放进hash表里注意这里hash表存的是右边,也就是带有b的p的幂次,每次查找的时候一整块一整块查询复杂度O(p)那么exgs能处理什么问题呢?处理(a,p)≠1的情况先将ax+kp≡b,如果a和p的gcd不能整除b的话那么就是无解否则两边同÷d,也就是(a/d)∗ax−1+k(p/d)=b/d(a/d)∗ax−1≡b/d( mod(p/d)),然后用e原创 2021-10-08 08:27:15 · 182 阅读 · 2 评论 -
I. Rise of Shadows
LINK题意:给定H和M,每天有H小时M分钟,求时针和分针角度<=α\alphaα的整分针数。思路:α=2πAHM\alpha=\frac{2\pi A}{HM}α=HM2πA,可以发现每分钟时针的速率是2πHM\frac{2\pi }{HM}HM2π,分针是2πM\frac{2\pi }{ M}M2π,他俩的差值是2π(H−1)HM\frac{2\pi(H-1)}{HM}HM2π(H−1)我们会发现两个指针一块动的时候不太好计算,我们尝试固定分针,枚举每一分钟时针对它的贡献,...原创 2021-10-04 19:05:03 · 487 阅读 · 0 评论 -
(扩)欧几里得的一些见解
ax+by=gcd(a,b)gcd(a,b)=gcd(b,a%b)首先证明上面这个柿子假设d=gcd(a,b)把a展开成k∗b+r,显然r=a%br=a−k∗b显然r是d的倍数,也就是d∣r,a%b=a−(a/b)∗b.假设会有个更大的D能∣a%b,那么也一定可以∣a和b,与前面不符合下面讲exgcd(a,b,x,y)a∗x1+b∗y1=(a,b)b∗x2+(a%b)∗y2=(a,b)b∗x2+(a−a/b∗b)∗y2=a∗x1+b∗y1a∗x1+b∗y1=a∗y2+b∗(x2−a/b∗y2)x1=y2,y原创 2021-10-04 11:58:05 · 189 阅读 · 0 评论 -
牛牛小数点 (欧拉定理)
Link题意:思路:f(i)结论就是如果i只含有2和5,那么就是0否则是max(mc(2),mc(5))+1max(mc(2),mc(5))+1max(mc(2),mc(5))+1,mcmcmc代表i的幂次,为什么呢,下面粗略的证明一下假设当前循环节长度为n,然后是从第一位开始的形如$$\frac{1}{i}=0. { k } {k } {k }…,那么我们假设\frac {1}{i}=0. { k } {k } {k }…1\两边同时乘以10{n}也就是10n*\frac {1}{i}={原创 2021-10-01 18:15:23 · 217 阅读 · 0 评论 -
C. Kuroni and Impossible Calculation(鸽巢定理)
题意:求∏abs(a[i]−a[j]) mod mm<=1000n<=2e5\prod abs(a[i]-a[j])~mod~m\\m<=1000 n<=2e5∏abs(a[i]−a[j]) mod mm<=1000n<=2e5思路:完全没想到这是个**题,运用鸽巢定理,考虑n>m的时候一定会有个两个模m相同的数,那么答案一定是0。#include<bits/stdc++.h>using namespa原创 2021-09-30 10:20:43 · 198 阅读 · 0 评论 -
Easy Math 杜教套路 积性函数
Link题意求∑i=1mmu[i∗n]n<=1e12m<=2e9\sum_{i=1}^{m}mu[i*n]\\n<=1e12 m<=2e9∑i=1mmu[i∗n]n<=1e12m<=2e9#include<bits/stdc++.h>using namespace std;#define int long longconst int N=2e6+10;int n,m;int mu[N],sum[N],prime[N],cnt,st[N];原创 2021-09-29 22:24:43 · 193 阅读 · 0 评论 -
ICPC 沈阳M - United in Stormwind SOSDP+FWT+容斥
题意:题意是真的难懂,求题目集(0~1<<m)中满足>=k对不同的试卷,两张试卷不同当且仅当至少存在一位不同,而且该位在题目集里。 n<=2e5 m<=20思路:我们可以把a和b当做0和1处理,我们可以先求出i xor j =ki ~xor~ j~=ki xor j =k的对数,为什么处理呢?因为对于任意某个位置为1的话那么就说明这两个试卷是不同的。怎么处理呢?可以fwt,a自己卷自己,先把a[0]减去n,然原创 2021-09-15 18:49:52 · 1360 阅读 · 2 评论 -
数字染色 gcd>1的子序列个数 容斥、莫比乌斯函数
link题意:长度为n的数组a,求gcd>1的子序列个数思路:考虑用容斥,把gcd拆成素数的乘积,先对a中的所有数都进行因子分解,然后每次计算,gcd是某个值x的倍数的方案数,那么对于任意因子p1p2p3…,我们考虑去重即可,会发现刚好是莫比乌斯的mu函数,质因子为2和以上的就不用算了,我们考虑单质因子的部分就能不重不漏的计算所有平方及以上的所有答案了,我们会发现某个数乘了一个单因子他的符号刚好就是*-1,刚好符合莫比乌斯函数的性质。如2计算了,3也计算了,那么就要去掉6的贡献。#inclu原创 2021-09-12 10:22:49 · 427 阅读 · 1 评论 -
Pass! (bsgs 推柿子)
题意:有T组样例,一共n个人传球,从1号开始最后回到1号,给定方案数,求最小的传球次数。(t<=100,n<=1e6,方案数<=998244353)思路:考虑推柿子 。 f[i]代表从1号开始传了i次回到1号的方案数,f[i]=(n-2)*f[i-1]+(n-1)*f[i-2],这里考虑两种情况*,第i-1个人如果是1号人员和不是1号人员,如果是一号人员,那么情况就是第i个人选择有(n-1)种,除了1号 。 还有一种如果不是一号,那么第i个人有(n-2)种选法(和左右两边的人都不.原创 2021-07-21 15:25:20 · 275 阅读 · 0 评论 -
E - Vasya and Beautiful Arrays
题意:给出一个数组,每个元素最多减少k,问能够调整出的整个序列的最大的gcd是多少。思路:我们可以发现答案最大值数组中的最小值,最小值为k+1,因为任何数取%(k+1)范围都在0到k,然后我们暴力枚举这个gcd,如何快速判断区间内是否有n个数呢,开个权值数组记录某段权值内的数有多少个,然后每次暴力+上gcd,最后统计数有多少个,由于是调和级数,复杂度是o(n*log(maxv)),maxv为数组中的最大值。代码:#include<bits/stdc++.h>using namespa原创 2021-04-12 22:40:26 · 168 阅读 · 0 评论 -
sj定理
题目类型 取石子 取到最后一粒石子就算输Anti-SG游戏决策集合为空的操作者胜其余规则与SG游戏一致这种游戏有一个特殊的解决工具:SJ定理我们先来看一下SJ定理的内容SJ定理对于任意一个Anti-SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件:游戏的SG值为0且所有子游戏SG值均不超过1游戏的SG值不为0且至少一个子游戏SG值超过1游戏的sg值就是nim的sg值。...原创 2020-12-03 20:12:22 · 472 阅读 · 0 评论 -
练习赛牛客
这题讲讲思路吧,告诉你两个数,算出他们俩能组成哪些数,其实就是裴蜀定理的应用,他们gcd的倍数都可以组成,只要判断奇偶性就行了。dfs题,我卡了太久了,按照不同辆小车dfs就行啦。#include<iostream>#include<cstring>#include<queue>#include<map>using namespace std;typedef pair<int,int> pii;int n,m,k;int dx.原创 2020-05-11 20:38:13 · 257 阅读 · 0 评论 -
费马小定理 快速幂
题意求一个超级大的数N,分成i种方案的总和,这个有个隔板法的公式,结果为2^(n-1)-1,因为n太大用费马小定理 费马小定理,a^(p-1)=1(%p)当p和a互质的时候,把n%(p-1)和n等效。#include<iostream>#include<string>using namespace std;const int mod=1e9+7;int qs(...原创 2020-03-30 23:04:00 · 349 阅读 · 0 评论 -
裴蜀定理
Alice认为4和7是幸运数字,并且如果一个数字是几个幸运数字的和,那么这个数字也是幸运数字,例如 14=7+7 18=7+7+4 11=7+4 7=7现在给你Q个数字,请你分别判断每个数字是否为幸运数字数据输入输入共Q+1行,第一行一个数字代表数字个数,接下来Q行,每行一个数字x 1≤Q≤100 1≤x≤1016数据输出输出共Q行...原创 2020-03-29 21:19:21 · 476 阅读 · 0 评论 -
中国剩余定理
这个定理主要是用来解决找一个数 它能够满足题目要求模一些数等于题目要求的值。`#include<bits/stdc++.h>using namespace std;typedef long long ll;ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1,y=0;return a;}ll d=exgcd(b...原创 2020-03-29 21:16:24 · 221 阅读 · 1 评论 -
完全错排
完全错排 递推公式 f[n]=(n-1)*(f[n-1]+f[n-2])HDU - 2049 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.最后...原创 2020-03-18 22:54:02 · 649 阅读 · 0 评论 -
等比数列蓝桥 求最大比值
X星球的某个大奖赛设了 M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54,其等比值为:3/2。现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。输入格式第一行为数字 N,表示接下的一行包含 N个正整数。第二行 N个正整数 Xi,用空格分开,每...原创 2020-03-06 22:56:21 · 472 阅读 · 0 评论 -
扩展欧几里得算法蓝桥 五指山
大圣在佛祖的手掌中。我们假设佛祖的手掌是一个圆圈,圆圈的长为 n,逆时针记为:0,1,2,…,n−1,而大圣每次飞的距离为 d。现在大圣所在的位置记为 x,而大圣想去的地方在 y。要你告诉大圣至少要飞多少次才能到达目的地。注意:孙悟空的筋斗云只沿着逆时针方向翻。输入格式有多组测试数据。第一行是一个正整数 T,表示测试数据的组数;每组测试数据包括一行,四个非负整数,分别为如...原创 2020-03-06 22:18:51 · 332 阅读 · 0 评论 -
最大因子链
输入正整数 X,求 X 的大于 1的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。输入格式输入包含多组数据,每组数据占一行,包含一个正整数表示 X。输出格式对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。每个结果占一行。数据范围1≤X≤220输入样例:23410100输出样例:1 11 12 12...原创 2020-03-06 11:54:36 · 423 阅读 · 0 评论 -
数论 正约数之和
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 S。所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)。可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的...原创 2020-03-06 11:47:12 · 956 阅读 · 0 评论 -
博弈论
sg定理 如果所有的sg值异或起来非0那该方必胜。可以通过证明,证明如下:假设所有sg的异或值为x sg(i)能变小成为sg(i)x然后带入就变成0了 最后游戏结束的条件也是0 那么在有胜势的一方可以通过精妙的操作让下方永远为0 所以下方必输,太厉害了,佩服佩服。下面是几道acwing的例题。题目1这道题可以抛砖引玉,引出博弈论,思路就是异或所有值,如果不是0必胜,反之必输。题目2...原创 2020-02-17 22:15:17 · 276 阅读 · 0 评论 -
前缀和,求到比该数大的距离
题目给定一个矩阵,求他达成至少一列或一行都为素数的操作数,每次操作可以让一个数加一思路:将矩阵转化为该点到比他大的最小素数的距离。遍历矩阵求前缀和的最小值#include<iostream>#include<algorithm>using namespace std;const int N=100010;int prime[N],cnt;bool st[N]...原创 2020-02-16 19:42:46 · 268 阅读 · 0 评论 -
不可估摸数(好题)
[题目](https://vjudge.net/contest/357311#problem/G)#include<iostream>using namespace std;const int N=500000;int s[N];bool b[N];void init(){ for(int j=1;j<=N;j++) //这种筛法复杂度nlogn for(in...原创 2020-02-16 19:39:21 · 319 阅读 · 0 评论 -
分解质因数
题目题意 给定一个数求出能构成它的质因数的和的最小值。思路 将它分解质因数 加起来就是最小值特殊情况需要判断的是比如8 9这些除了1 只有一个公因数的 答案要加上1。思路就是先把所有数据范围开根号内的素数预处理出来,再判断他是不是质数,如果是质数直接printf它本身+1,如果不是就分解质因数求和。#include<iostream>#include<cmath>...原创 2020-02-16 18:53:30 · 253 阅读 · 0 评论 -
组合数
题目题目就是求出两个大组合数的比值,精度保留小数点后五位。用分解质因数做#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;int num[100010];void cal(int d,int flag){...原创 2020-02-16 18:18:00 · 215 阅读 · 0 评论 -
斐波那契数列循环节
题目题意大致是输入2的64次方以内的数求出它们取模以后下标的斐波那契数列的值,斐波那契数列在模上某个值后是具有循环节的,我们要把循环节的长度算出来,然后把循环节长度带入快速幂最后再模上n求出答案。本题坑点就是数据范围用longlong还不够要用unsigned long long,当n为1的时候答案都是0。AC代码:#include<iostream>using namespa...原创 2020-02-16 18:15:01 · 594 阅读 · 0 评论 -
求组合数 排列组合
题目第一种:复杂度为n*n#include<iostream>using namespace std;const int N=2010;int c[N][N];const int mod=1e9+7;void init(){ for(int i=0;i<N;i++) for(int j=0;j<=i;j++) if(!j) ...原创 2020-02-15 18:07:22 · 296 阅读 · 0 评论 -
高斯消元(求多组解)
题目思路就是先从c列开始找出最大的一行与目前第r行做交换,然后把该行的第一个数除成1,再把r行下面的第c个元素消成0。如果最后r比n小,有无解和无限解的可能,等式左边已经变成0了,如果右边不为0就是无解,另外的就是有无限解。#include<iostream>#include<algorithm>#include<cmath>using namesp...原创 2020-02-15 17:25:28 · 481 阅读 · 0 评论 -
筛法求欧拉函数之和
题目#include<iostream>using namespace std;const int N=1000010;bool st[N];int prime[N];int ph[N];int cnt;long long ola(int n){ ph[1]=1; for(int i=2;i<=n;i++) { if(...原创 2020-02-13 22:52:11 · 213 阅读 · 0 评论 -
欧拉函数
欧拉函数主要是用来算互质数个数的。公式就是结论:ϕ(N)表示1 N中与N互质的数的个数结论:ϕ(N)表示1 N中与N互质的数的个数N=p1a1×p2a2×……×p2a2N=p1a1×p2a2×……×p2a2ϕ(N)=N(1−1p1)(1−1p2)……(1−1pn)ϕ(N)=N(1−1p1)(1−1p2)……(1−1pn)=∏ni=1piai=∏i=1npiai求一个数的复杂度:求一个数的...原创 2020-02-13 22:45:42 · 198 阅读 · 0 评论 -
欧几里得算法
题目在这里#include<iostream>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}int main(){ int n; cin>>n; while(n--) { int a,b; cin>&...原创 2020-02-13 22:37:52 · 318 阅读 · 0 评论