数论
文章平均质量分 64
数论
_九磅十五便士_
这个作者很懒,什么都没留下…
展开
-
2018-2019 ACM-ICPC, Asia Nanjing Regional Contest J. Prime Game(数论)
题组传送门题意现在给你一个含有nnn个正整数的集合a[]a[ ]a[],现在定义一个函数mul(l,r)mul(l,r)mul(l,r)代表al∗al+1∗...∗ar−1∗ara_l*a_{l+1}*...*a_{r-1}*a_ral∗al+1∗...∗ar−1∗ar并定义fac(l,r)fac(l,r)fac(l,r)代表mul(l,r)mul(l,r)mul(l,r)中含有不同的素因子的个数。请你计算出fac(i,j)fac(i,j)fac(i,j)思路...原创 2021-09-28 19:55:46 · 141 阅读 · 0 评论 -
P5664 [CSP-S2019] Emiya 家今天的饭(dp+容斥)
[题目传送门]原创 2021-09-14 20:19:07 · 382 阅读 · 0 评论 -
P1450 [HAOI2008]硬币购物(容斥原理)
题目传送门问题引入我们现在可以给出这样的一个问题:现在给你nnn种不同的价值的硬币,分别是c[i]c[i]c[i],现在你要购买一个价值为sss的商品,每一种硬币不限,请问你有多少种购买的方式。那么很显然,这个是一个背包问题,我们只需要遍历每一个价值,对每一个硬币的价格进行dp,二重循环就可以。这个很简单。现在题目加一些难度现在给你nnn种不同的价值的硬币,分别是c[i]c[i]c[i],现在你要购买一个价值为sss的商品,第一种硬币只能使用k次,其他的每一种硬币不限,请问你有多少种购买的原创 2021-09-12 20:48:18 · 160 阅读 · 0 评论 -
集合计数(容斥原理)
题目传送门-洛谷思路分析首先对于一个有nnn个元素的集合一定有2n2^n2n个不同的子集,在这些子集中,也一定有22n2^{2^n}22n个不同的子集取法,刨去空集,那么我们就获得了22n−12^{2^n}-122n−1种取法,那么因为你选的若干个集合中一定有kkk个元素作为交集,那么我们现在先要选出来这些元素都是啥,因此要求出CnkC_n^kCnk,现在我们的答案就是要求Cnk∗(22n−k−1)C_n^k*(2^{2^{n-k}}-1)Cnk∗(22n−k−1),你以为完了吗,不!这并不是最终原创 2021-09-11 16:54:06 · 490 阅读 · 0 评论 -
~一些结论
最近遇到了一些数学方面的(或者数论方面的)结论题。CCPC网络选拔赛(unr)— power sum原创 2021-09-07 21:03:46 · 133 阅读 · 0 评论 -
CF1567C Carrying Conundrum(组合计数+思维)
题目传送门思路这个题和我们正常的竖式运算的区别在于:正常的竖式运算是向下一位进位,而本题的新定义运算是隔位进位,因此我们就可以考虑将这些数按照奇数和偶数位进行拆位:例如:150051500515005可以拆位成为:105105105(奇数位)和505050(偶数位)这样的情况下奇数位一共有105+1种可能性(分别是:0 105、1 104、2 103…104 1、105 0)同理还有偶数位一共有51种可能性,因此我们可以先计算总体个数:106*51但是现在我们有一个问题,就是我们获得原创 2021-09-07 20:21:44 · 184 阅读 · 0 评论 -
CF1567D Expression Evaluation Error(数学+思维)
题目传送门思路这道题的思路其实就是,比方说我们现在要拆10000为3位,那么我们肯定拆成1000 1000 8000要比9998 1 1 好,(位数越低,其代表的值越小)前者是10∗11310*11^310∗113后者是9∗113+9∗112+9∗111+10∗1109*11^3 +9*11^2+9*11^1+10*11^09∗113+9∗112+9∗111+10∗110因为是10进制转换为11进制,因此进位越多其损耗越大,因此我们需要让我们拆分的位数加起来进位越少越好,所以,每一位拆成以1打头的原创 2021-09-07 20:12:44 · 79 阅读 · 0 评论 -
CF1556D Take a Guess(位运算)
题目传送门题意您可以发起不超过2∗n2*n2∗n次提问,提问的内容是对于两个不同下标的两个数ai,aja_i,a_jai,aj,可以提问他们的aia_iai&aja_jaj或者aia_iai|aja_jaj,求出整个数组,并对其排序,求出第kkk个数据。思路关于位运算,这里有个结论:(牛客多校D8-D)ai+aj=aia_i+a_j=a_iai+aj=ai & aj+aia_j+a_iaj+ai | aja_jaj那么我们就可以询问aia_iai和任何位原创 2021-08-30 08:30:51 · 150 阅读 · 0 评论 -
关于两数相乘
a∗ba*ba∗b 的计算方法,现在给你两个数a和b,但是他们的数据范围不同则应该选择不同的计算方法来落实这个问题,保证(a,b在ll范围内)a*b(0<=a,b<=1e4)直接int乘一下不必多说a*b(0<=a,b<=1e6)会爆ll,要开lla*b(0<a,b<=1e18)取模(mod<=1e10)因为有模数限制,因此我们需要对这个东西取模,取模以后结果仍然在ll范围内,因此还能正常O(1)求。取模(mod<=1e18)这样的两个数相乘原创 2021-08-23 10:00:19 · 548 阅读 · 0 评论 -
斐波那契(矩阵快速幂)
传送门眼快瞎了也没找出来错,还是希望下一回细心一点构造左矩阵:1 1 1 4 6 41 0 0 0 0 00 0 1 3 3 10 0 0 1 2 10 0 0 0 1 10 0 0 0 0 1构造右矩阵1618421然后带入板子就好啦#include<iostream>using namespace std;#define LL long long #define int long long const int mod=1e9+7;struct Ma原创 2021-08-22 18:50:29 · 82 阅读 · 0 评论 -
CF1451D Integers Have Friends(博弈问题)
题目传送门题意Alice和Bob又来做游戏啦!这次他们做的是,给你一个直径为d的圆,现在有一枚棋子位于(0,0)原点,每一次操作可以把棋子向右或者上方移动一个单位长度,Alice先手,Bob后手,棋子只能位于圆中,不能移动则失败,请输出赢者。思路这道题和在桌面上放硬币的思路非常相似:先手先占据桌子的中心位置,那么后手无论怎么放置,我们的先手都可以按着这个中心对称的位置跟着放就可以了,因此先手必赢。那么按着这个思想。我们现在设xxx是2∗(x∗k)2<=d22*(x*k)^2<=d原创 2021-08-08 23:08:38 · 85 阅读 · 0 评论 -
CF1493D GCD of an Array (分解定理+思维)
题目传送门这道题有一个非常牛逼的数据结构就是multisetmultisetmultiset题意先给你一个序列,然后给你几组询问,询问的第一个数是在第x个位置上,第二个数p代表,在第x个位置上乘p。请找到这个序列的gcd,并输出。思路这道题肯定是让你找到所有数的公共的因子,那么就可以以因子为下标,存到multisetmultisetmultiset里面,同时开一个数组标记一下,这个数作为了几个数的因子。如果能找到这个因子,并这个数已经作为全部的因子,答案乘这个数。#include<iost原创 2021-08-06 18:17:27 · 103 阅读 · 0 评论 -
CF1548C The Three Little Pigs(组合数学+dp)
题目传送门题意这道题实际上就是让求∑i=1nC3∗ix,x\displaystyle\sum_{i=1}^{n}C_{3*i}^x,xi=1∑nC3∗ix,x是我们每次询问的数值,nnn是小猪进场的轮数。思路我们可以定义一个dpdpdp方程,dp[x][m]dp[x][m]dp[x][m]代表∑i=1n−1C3∗i+mx\displaystyle\sum_{i=1}^{n-1}C_{3*i+m}^xi=1∑n−1C3∗i+mx因此,我们可以得到dp[x][0]+dp[x][1]+dp[x]原创 2021-08-03 12:24:53 · 293 阅读 · 0 评论 -
2021牛客多校5-Double Strings(dp+组合数学)
这道题不要读假题呀,这道题不是让你选连续的一段(要是连续的一段不就成签到题了么)dp思路用dp[i][j]dp[i][j]dp[i][j]表示只考虑 AAA中的前iii个字符和BBB中的前jjj个字符时的相同的子序列的个数。状态转移如下:dp[i][j]=dp[i−1][j]+dp[i][j−1]−dp[i−1][j−1]dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]dp[i][j]=dp[i−1][j]+dp[i][j−1]−dp[i−1][j−1]...原创 2021-08-01 13:20:08 · 157 阅读 · 0 评论 -
CF475D CGCDSSQ(ST算法+二分)
题目传送门原创 2021-07-30 12:54:19 · 372 阅读 · 1 评论 -
CF1547F Array Stabilization (GCD version)(ST算法+数论)
题目传送门思路STSTST算法STSTST算法能在O(nlogn)O(nlogn)O(nlogn)时间处理以后(动态规划思想),然后O(1)O(1)O(1)时间来查询的一种及其高效的做法。最大公约数的一个性质:gcd(i,j,k)=gcd(gcd(i,j),k)gcd(i,j,k)=gcd(gcd(i,j),k)gcd(i,j,k)=gcd(gcd(i,j),k)因此设st[i][j]st[i][j]st[i][j]表示数列中在下标子区间[i,i+2j−1][i,i+2^j-1][i,i+2j−原创 2021-07-28 14:54:25 · 140 阅读 · 2 评论 -
2021牛客多校 Product of GCDs(拓展欧拉定理+欧拉函数)
题目传送门大意给一个数组,求数组中所有大小为k的子集的gcd的乘积。样例:5 2 200402202 4 8 12 14这个就是从第二行找到k=2个数,(选出来,然后将这些组的gcd乘积求出来)2-4:22-8:22-12:22-14:24-8:44-12:44-14:28-12:48-14:212-14:2乘起来,然后对最后答案20040220取模结果就是8192思路其实就是根据素数,来计算它对整体答案的贡献,来找它的倍数的大小,最后计算贡献:比如现在给你一组数它原创 2021-07-24 23:37:06 · 272 阅读 · 1 评论 -
2021牛客多校1-Hash Function(fft)
题目传送门题意给你一些范围为1-500000的数要你求出来最后的结果原创 2021-07-23 09:50:54 · 126 阅读 · 1 评论 -
2021牛客多校1-Alice And Bob(暴力求SG函数)
题目传送门这道题以一个基准的必败点为单位。sg[i][j]的意思是:这两堆石子分别剩下i块石头和j块石头的时候如果是1代表先手必胜,反之就是先手必败那么我们现在先用双重循环递归枚举一遍0-5000的状态,如果当前状态先手必败,那么我们现在就枚举以当前状态,第一堆和第二堆分别加上k和k的倍数或者k的倍数和k,这个状态一定是先手必胜,那么就反转一下这个状态。同时我们这道题有一个值得注意的问题就是,使用bool类型的数组来存放,一定不要使用int,bool类型的数组处理问题会更加迅速,否则会TLE#in原创 2021-07-22 23:36:19 · 113 阅读 · 0 评论 -
CF1542C Strange Function(数论+思维)
题目传送门非常赞的一道数论题~题目大意现在让f(i)为i的最小的非因子。也就是不能整除i的最小正整数。求∑f(i)的值。思路这道题首先想到从1~n去试一试,能不能整除,然后想如何去优化。我们想到了lcmlcm(a1,a2,a3,a4,...an)lcm(a_1,a_2,a_3,a_4,...a_n)lcm(a1,a2,a3,a4,...an)一定能被a1,a2,a3,a4,...ana_1,a_2,a_3,a_4,...a_na1,a2,a3,a4,...an分别整原创 2021-07-05 12:41:30 · 471 阅读 · 16 评论 -
CF1512G Short Task(数论+dp)
题目传送门等我上完课回来再写题解~#include<iostream>using namespace std;typedef long long ll;const int N=1e7+1000;int primes[N], cnt; // primes[]存储所有素数bool st[N]; // st[x]存储x是否被筛掉ll dp[N];int ans[N];void get_primes(int n){ for (int i = 2; i原创 2021-06-04 13:48:36 · 132 阅读 · 0 评论 -
CF1475C Ball in Berland(排列组合+容斥原理)
题目传送门题意分析这天,学校组织男朋友和女朋友一块跳舞,第一行为男生编号,第二行为女生编号,现在要求从中选两对进行跳舞,但是他们其中一些人不想暴露自己一脚踏多船的事实,因此男生不愿意同时和不同的舞伴一块跳舞,女生同理,请问你能找出多少组这样的组合一块跳舞?思路其实这道题寒假训练做过,但是当时没写题解,太失败了!这道题其实就是排列组合我们先看第一对(第一列),正常情况下1 2 3 4列有四种组合方式(1-1,1-2,1-3,1-4)但是由于男生女生会重复,因此我们要去除男生中重复的,和女生中重原创 2021-05-28 08:49:42 · 151 阅读 · 0 评论 -
CF1497E1 Square-free division (easy version)(唯一分解定理+数论+思维)
题目传送门题意现在给你一串数字,请你划分最少的区间,使得这区间里面的所有数字两两相乘都不是平方数,请输出区间数。思路这道题可以用一个map来存储(当然要进行质因数的分解,要不然会卡常(唯一分解定理))因数为奇数的次数,因为偶数一定可以被开方。这道题的实现方式我觉得还是比较精巧的#include<iostream>#include<map>using namespace std;const int N=1e7+9;int primes[N], cnt; //原创 2021-05-22 16:02:59 · 132 阅读 · 0 评论 -
[CQOI2007]余数之和SUM(数论分块)
这是一个十分巧妙的数论分块原创 2021-05-14 16:56:45 · 156 阅读 · 0 评论 -
The Luckiest number(同余+欧拉定理)
题目传送门单词小讲堂consist 组成multiple 倍数construct 构建,构造题目大意这个题的意思就是说,中国人认为8是吉祥数,当然了鲍勃有自己的吉祥数L,但是鲍勃喜欢中国女生,所以希望自己的吉祥数L的倍数可以是8888888……(n个8),下面给出一些L请你找出这些8的最小位数,如果不行,输出0即可!思路公式预警!!考虑到8888888……=(100000000000……−1)∗898888888……=(100000000000……-1)*\frac{8}{9}888888原创 2021-05-11 18:29:53 · 169 阅读 · 0 评论 -
一群小青蛙呱蹦呱蹦呱(数学+思维+贪心)
题目传送门这道题吧,一看就不能暴力,从数学的思维角度来看啊现在我想让你求两个数a,ba,ba,b的最小公倍数,我怎么求?(小意思我直接lcm) 闭嘴,这么简单我还写什么题解唉,lcm什么的都是过时的东西 (bushi)根据唯一分解定理:a=(a1)x(a2)y……(an)za=(a_1)^x(a_2)^y……(a_n)^za=(a1)x(a2)y……(an)z同理b=(a1)f(a2)g……(an)hb=(a_1)^f(a_2)^g……(a_n)^hb=(a1)f(a2)g……(a原创 2021-05-10 18:38:46 · 134 阅读 · 0 评论 -
CF1294D MEX maximizing(思维+基础数论)
题目传送门题意先给你两个数:a,ba,ba,baaa代表的是一共有aaa组询问,bbb代表的是可以对这个数进行多次加减bbb的操作。下面有aaa行,分别代表每组询问,请输出每组询问过后的没有被询问的最小的正整数。思路这个题相对来说思路比较复杂,但是代码量十分友好。给一个指针ddd,每组询问的ccc,让st[cst[cst[c%b]++b]++b]++(让ccc显出原形,这样代表目前和c模b同余的数中,我已经询问过c+c∗(st[cc+c*(st[cc+c∗(st[c%b]−1)b]-1)b原创 2021-05-09 18:10:40 · 113 阅读 · 0 评论 -
阶乘分解(分解+思维)
题目传送门思路现在令一个素数ppp,因为阶乘n!=(n)∗(n−1)∗(n−2)∗……∗2∗1n!=(n)*(n-1)*(n-2)*……*2*1n!=(n)∗(n−1)∗(n−2)∗……∗2∗1,所以np\frac{n}{p}pn代表的是n!n!n!里面有几个数有ppp这个因子,同理npk\frac{n}{p^k}pkn代表的是n!n!n!里面有几个数有pkp^kpk这个因子,从小到大遍历一遍,ppp这个结果就是∑i=1pi<=nnpi\displaystyle\sum_{i=1}^{p^i原创 2021-05-08 19:15:57 · 667 阅读 · 1 评论 -
UVA1636 决斗 Headshot(条件概率)
题目传送门这道题的题意其实就是,现在给你一把枪:第一枪为空炮,现在有俩操作1:直接打一枪(每一次打一枪都会自动移动到下一位)2:转一下再打一枪(转的位置再任何情况下每一位的概率是相同的)请问我想要下一枪打空炮,(也就是让打空炮的概率最大),我应该怎么操作(我是应该选择1还是选择2呢)选择转一下再开枪我的打空炮计算概率其实就是:全部为0的位置(没有子弹的位置)总位置(弹夹的所有位置)\frac{全部为0的位置(没有子弹的位置)}{总位置(弹夹的所有位置)}总位置(弹夹的所有位置)全部为0的位置(没原创 2021-05-05 21:44:35 · 113 阅读 · 0 评论 -
CF235E Number Challenge(莫比乌斯反演)
题目传送门啊,我觉得这个莫反还是挺不好推的(主要还是因为太菜了:(((()这道题要你求∑i=1a∑j=1b∑k=1cd(ijk)\displaystyle\sum_{i=1}^{a}\displaystyle\sum_{j=1}^{b}\displaystyle\sum_{k=1}^{c}d(ijk)i=1∑aj=1∑bk=1∑cd(ijk)d()d()d()表示约数的个数首先我就犯了一个大错误:因为上一道题是这样的d(ij)=∑x∣i∑y∣j[gcd(x,y)=1]d(ij)=\dis原创 2021-05-05 18:24:18 · 144 阅读 · 0 评论 -
P3327 [SDOI2015]约数个数和(思维+莫比乌斯反演)
题目传送门这是一个很有意思的莫反这道题要你求∑i=1n∑j=1md(ij)\displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{m}d(ij)i=1∑nj=1∑md(ij)d()d()d()表示约数的个数这里有一个结论需要记住就是:d(i,j)=∑x∣i∑y∣j[gcd(x,y)=1]d(i,j)=\displaystyle\sum_{x|i}^{}\displaystyle\sum_{y|j}^{}[gcd(x,y)=1]d(i,j)=x∣原创 2021-05-04 21:41:33 · 229 阅读 · 0 评论 -
P2522 [HAOI2011]Problem b(莫比乌斯反演+容斥原理)
稍等再写,先写cf的题解原创 2021-05-04 14:25:49 · 99 阅读 · 0 评论 -
P2568 GCD(莫比乌斯反演)
题目传送门本题题意转化成为:∑i=1n∑j=1n[gcd(i,j)==p]\displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[ gcd(i,j)==p]i=1∑nj=1∑n[gcd(i,j)==p]这道题用莫比乌斯式子推其实也挺简单的说…………欧拉函数的那个还理解了半天我真菜step:1step:1step:1提取公因式∑p=1p∈prime,p<=n∑i=1[n/p]∑j=1[n/p]ε(gcd(i,j))\displaysty原创 2021-05-04 13:57:08 · 116 阅读 · 0 评论 -
P2568 GCD(欧拉函数)
题目传送门本题题意转化成为:∑i=1n∑j=1n[gcd(i,j)==p]\displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[ gcd(i,j)==p]i=1∑nj=1∑n[gcd(i,j)==p]又因为gcd(i,j)=pgcd(i,j)=pgcd(i,j)=p转化成为gcd(x∗p,y∗p)=pgcd(x*p,y*p)=pgcd(x∗p,y∗p)=p 那么等价于gcd(x,y)=1gcd(x,y)=1gcd(x,y)=1那么1<原创 2021-05-03 23:26:01 · 173 阅读 · 0 评论 -
P2398 GCD SUM(莫比乌斯反演)
题目传送门前置知识:本题应用到的迪利克雷卷积推导过程如下:因此用O(n)的算法就可以AC本题#include<iostream>using namespace std;typedef long long ll;const int N=1e5+10;int primes[N], cnt; // primes[]存储所有素数int euler[N]; // 存储每个数的欧拉函数bool st[N]; // st[x]存储x是否被筛原创 2021-04-27 18:30:04 · 118 阅读 · 1 评论 -
[SDOI2008]仪仗队(欧拉函数)
题目传送门这道题相对比较简单首先假定我们的人站在(0,0)(0,0)(0,0)这个坐标点,那么就可以枚举斜率,那么我们很容易就知道,斜率上的每一条线上的每一个点都只能看到最前面的那个人,后边的都被挡住了,又因为斜率的分子和分母都是最简的,所以说只需统计横纵坐标互质的个数即可!其中斜率不存在和斜率为0的情况单独考虑,然后其余点,分成两个小三角形算一边再×2就可以了#include<iostream>#include<cstring>using namespace std;原创 2021-04-26 13:37:08 · 113 阅读 · 0 评论 -
CF1514C Product 1 Modulo N (数论基础+思维)
题目传送门参考大佬博客本蒟蒻被fst的自闭场~~题意这个题目的意思就是什么呢?给你一个数nnn,现在让你找到111~n−1n-1n−1的最长子序列(非lislislis),子序列全部元素相乘modnmod nmodn等于111,请你先输出长度,然后从小到大输出子序列分别是什么(输出一个即可!)分析那么这道题我的思路就是,找到最长的子序列让他们的相乘的积等于k∗n+1k*n+1k∗n+1 (k为任意常数)(k为任意常数)(k为任意常数)那么由欧几里得定理,我们发现除了1以外,nnn和k∗n+1原创 2021-04-20 08:38:47 · 295 阅读 · 3 评论 -
POJ3126 Prime Path(BFS+线性筛/埃氏筛)
这道题给出了两种做法:首先当然要请出我们可爱的线性筛:int primes[N], cnt; // primes[]存储所有素数bool st[N]; // st[x]存储x是否被筛掉void get_primes(int n){ for (int i = 2; i <= n; i ++ ) { if (!st[i]) primes[cnt ++ ] = i; for (int j = 0; primes[j] <原创 2021-04-08 22:17:35 · 115 阅读 · 0 评论 -
CF1091C New Year and the Sphere Transmission(裴蜀定理+同余方程+思维)
题目传送门分析题目:其中的一个位置ppp被球传到需要满足的条件是p≡x∗k(modn)p≡x*k(mod n)p≡x∗k(modn),其中x是正整数。这个同余方程等价于:x∗k+y∗n=px*k+y*n=px∗k+y∗n=p,由裴蜀定理可以知道p=N∗gcd(k,n)p=N*gcd(k,n)p=N∗gcd(k,n),其中NNN为正整数。由于k<=nk<=nk<=n那么gcd(k,n)gcd(k,n)gcd(k,n)就是nnn的因数。而又因为裴蜀定理具有无限整数解的性质。又知道ppp是原创 2021-03-27 23:23:28 · 108 阅读 · 0 评论 -
P4549 【模板】裴蜀定理(裴蜀定理及其推广)
题目传送门裴蜀定理裴蜀定理裴蜀定理设a,ba,ba,b为正整数,则关于x,yx,yx,y的方程ax+by=cax+by=cax+by=c有整数解当且仅当ccc是gcd(a,b)gcd(a,b)gcd(a,b)的倍数。也即:ax+by=k∗gcd(a,b)ax+by=k*gcd(a,b)ax+by=k∗gcd(a,b)那么裴蜀定理针对多组变量是否成立呢?首先来理解一下裴蜀定理ax+by=k∗gcd(a,b)ax+by=k*gcd(a,b)ax+by=k∗gcd(a,b)gcd(a,b)gcd(a,原创 2021-03-23 15:50:10 · 331 阅读 · 0 评论