随笔分类 -  数论类

摘要:思路:看到(a + b)想到乘上(a - b)变成平方差展开(并没有想到2333), 两边同时乘上a - b, 最后式子转化成了a ^ 4 - ka = b ^ 4 - kb,剩下的就水到渠成了。 0的时候特判一下即可。 代码: 阅读全文
posted @ 2019-07-06 20:54 维和战艇机 阅读(418) 评论(0) 推荐(0)
摘要:题意:有一个长度为n的数组a和一个长度为m的数组b,一个素数p。有n个集合,初始都只有一个1。现在,对(i从1到n)第i个集合执行以下操作: 对所有集合中的元素c,把c * (a[i] ^ b[j]) mod p 加入集合(j从1到m), 直到集合的元素不再增加为止。 问最后这n个集合的并有多少个元 阅读全文
posted @ 2019-07-04 23:36 维和战艇机 阅读(358) 评论(0) 推荐(0)
摘要:题意:给你一个数组,你可以把数组中的数减少最多k,问数组中的所有数的GCD最大是多少? 思路:容易发现,GCD的上限是数组中最小的那个数,而因为最多可以减少k,及可以凑出来的余数最大是k,那么GCD的下限是k + 1,所以当最小的数小于等于k + 1时,答案是最小的数。如果最小的数大于k + 1,我 阅读全文
posted @ 2019-06-30 14:11 维和战艇机 阅读(307) 评论(0) 推荐(0)
摘要:题意:设f(n) = c ^ (2n - 6) * f(n - 1) * f(n - 2) * f(n - 3), 问第n项是多少? 思路:官方题解:我们先转化一下,令g(x) = c ^ x * f(x), 那么原式转化为了g(x) = g(x - 1) * g(x - 2) * g(x - 3) 阅读全文
posted @ 2019-06-12 21:06 维和战艇机 阅读(524) 评论(0) 推荐(0)
摘要:题意及思路:https://blog.csdn.net/bossup/article/details/37076965 代码: 阅读全文
posted @ 2019-06-03 11:05 维和战艇机 阅读(201) 评论(0) 推荐(0)
摘要:题意:给你一个集合,让你构造一个长度尽量长的排列,使得排列中任意相邻两个位置的数XOR后是集合中的数。 思路:我们考虑枚举i, 然后判断集合中所有小于1 << i的数是否可以构成一组异或空间的基,如果可以就可以通过深搜构造出来。判断的方法是通过高斯消元。找到最大的i,我们通过深搜的方式构造答案,深搜 阅读全文
posted @ 2019-05-18 16:05 维和战艇机 阅读(343) 评论(0) 推荐(0)
摘要:题意:给你一堆数,问其中lcm最小的一对数是什么? 思路:因为lcm(a, b) = a * b / gcd(a, b), 所以我们可以考虑暴力枚举gcd, 然后只找最小的a和b,去更新答案即可。 数据范围1e7? 不慌,bitset搞一下, 1e7log(1e7)可以500ms过。 代码: 阅读全文
posted @ 2019-04-19 10:40 维和战艇机 阅读(278) 评论(0) 推荐(0)
摘要:思路看这篇博客就行了:https://www.cnblogs.com/zhouzhendong/p/CF1109D.html, 讲的很好 今天学到了prufer编码,这是解决树上计数问题的一大利器,博客:https://www.cnblogs.com/jianglangcaijin/p/598993 阅读全文
posted @ 2019-04-11 16:40 维和战艇机 阅读(239) 评论(0) 推荐(0)
摘要:题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v。 2:两个集合求并集。 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合。 4:问某个可重复集合的元素v的个数取模2之后是多少。 思路:因为集合的元素是对2取模,那么我们可以用bitset来代替可重复集合。但是,如果每个 阅读全文
posted @ 2019-03-12 21:48 维和战艇机 阅读(292) 评论(0) 推荐(0)
摘要:用递推的方式写的写挂了,而如果用组合数又不会高精度除法,偶然看到了别人的只用高精度乘低精度求组合数的方法,记录一下 阅读全文
posted @ 2018-10-22 19:50 维和战艇机 阅读(306) 评论(0) 推荐(0)
摘要:#include using namespace std; typedef long long ll; const int a[4]={2,3,4679,35617}; int p[36000],b[4],n,g,ans,i,j,x,y,mod=999911658; int power(int a,int b){//快速幂 int c=1; for(;b;b>>=1){ if(b&1... 阅读全文
posted @ 2018-08-24 16:16 维和战艇机 阅读(272) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 解法:找规律。因为最多三项,a1^a2^a3可以拆成(a1+2)+(a2+1)*a3,然后建成数对,其中数对的第一个元素是两个元素中的最小值,第二个是最大值。 (a1+2)可以变成(a1+2)*i 阅读全文
posted @ 2018-08-21 20:33 维和战艇机 阅读(388) 评论(0) 推荐(0)
摘要:题意:给你若干个数对,每个数对中可以选择一个个元素,问是否存在一种选择,使得这些数的GCD大于1? 思路:可以把每个数对的元素乘起来,然后求gcd,这样可以直接把所有元素中可能的GCD求出来,从小到大枚举即可,需要特判一下第一个元素是素数的情况。 阅读全文
posted @ 2018-08-20 10:11 维和战艇机 阅读(347) 评论(0) 推荐(0)
摘要:这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: 阅读全文
posted @ 2018-08-15 20:56 维和战艇机 阅读(352) 评论(0) 推荐(0)