数论
文章平均质量分 63
johsnows
正在静下心来学算法的acmer
展开
-
欧拉函数
欧拉函数 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。 Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身转载 2016-10-31 21:30:21 · 359 阅读 · 0 评论 -
codeforces 839 D Winter is here
最后johsnows做jonsnow的题tle在了39...大概是因为我是假的snow吧。这个题的想法挺套路的。想法就是去枚举倍数,看有多少个数是当前这个数的倍数,这些数的gcd一定是当前这个数的倍数,假设有n个数,题目所求为gcd*k,枚举1注意求1-n的i*C(i,n)需要求一下公式,不能暴力求。先把C(i,n)拆成阶乘的形式,就可以看出来i*C(i,n)就是n*(i-原创 2017-08-13 17:36:42 · 514 阅读 · 0 评论 -
hdu 6053 TrickGCD(筛法+容斥)
题意:给出a数组,问有能构成多少个长度与a相等的b数组,每个对应位置b比a小,并且gcd(b[1],b[n])>1.a[i]解题思路:看着大神的代码补的:http://www.cnblogs.com/jhz033/p/7246028.html看范围就知道要去枚举gcd,对于每个gcd,在a[i]这个位置上有gcd/a[i]个数能满足条件构成b[i],只要把每个位原创 2017-07-27 21:00:32 · 1286 阅读 · 0 评论 -
URAL 1748. The Most Complex Number(反素数)
题意:求n以内约数个数最多的数,有多个约数相等的就求最小的那一个。解题思路:就是说求反素数,其实可以直接打个表。。代码:#include #define LL long long using namespace std;const LL inf=1e18+1;LL ans;int p[16] = {2,3,5,7,11,13,17,19,23原创 2017-06-05 16:02:25 · 259 阅读 · 0 评论 -
codeforces 27 E. Number With The Given Amount Of Divisors(反素数)
题意:求最小的约数个数为n的数解题思路:反素数经典问题。这题要求的就是反素数,因为反素数的质因子一定是连续的,所以可以dfs枚举在连续几个质因子上的个数,即枚举种t1,t2,t3,每一个素因子的幂,来算出当前的数的因子个数,对于等于n的我们更新一下答案,使答案更小即可。更形象一点的还是看acdreamers的博客吧,看到搜索树的图就很好理解了。代码:原创 2017-06-05 11:39:50 · 330 阅读 · 0 评论 -
山东省第八届省赛 sdut 3896(找规律+组合数取模)
题意:如图让你求从(1,1)到(A,B)有多少种方案。解题思路:设向左走l步,向下走r步,向下走c步,我们枚举c,当c确定的时候,l和r也同时确定了,然后求一下l,r,c的排列数(l+r+c)!/(l!*r!*c!)就好了。需要预处理阶乘的逆元。具体见代码:#include #define LL long long using n原创 2017-05-10 16:53:48 · 614 阅读 · 0 评论 -
poj 2886 Who Gets the Most Candies?(线段树+二分+反素数)
题意:n个小朋友围成一圈,每个小朋友有自己的名字以及一张卡片,卡片上的数字a代表在自己出列后想让自己右边第a个人下一个出列,如果a解题思路:暴力来的话是n^2的,由于n是5e5,所以肯定不行。我们可以用一个线段树维护一下区间内剩余的数的个数,然后我们通过转换a,把下一个要出列的人在当前剩下的序列里的编号求出来,然后我们去query这个编号在原序列上的位置,这时候就要二分一下原创 2017-05-29 23:54:20 · 333 阅读 · 0 评论 -
第八届山东省赛 C sdut 3895 fireworks(组合数+逆元)
题意:一个烟花(位置为x)每秒爆炸并往两边(x-1,x+1)分裂成两部分,不断循环。给你n个位置,每个位置上有c个烟花,问t秒后,w位置上有多少个烟花。解题思路:容易推出对于一个烟花来说,t秒后周围的烟花数量分部就是杨辉三角的t+1行,不过每两个数之间要多一个0.n的上限1e5,不能打出杨辉三角需要o(n^2)的时间显然是不行的。所以我们只能直接求组合数,求的时候除法取原创 2017-05-10 12:37:27 · 452 阅读 · 0 评论 -
poj 2478 Farey Sequence(基于素数筛法欧拉函数)
题意:求第n个farey 序列中元素的个数第n个farey序列中的元素为分子分母小于等于n,且不能约分了的分数。思路:第n个序列中,包含分母从2到n的分数,要求不能被约分的分数个数,可以分别求出2到n中每个数有多少个小于它本身与它互质的数,再加和即可。求小于n的与n互质的数最快的办法是欧拉函数,调用下即可。基于素数筛法求欧拉函数的原理:设a是n的质因原创 2016-11-01 15:27:23 · 372 阅读 · 0 评论 -
codefoces 724 c Ray Tracing (扩展欧几里德)
题意:给定一个矩形,长n宽m, 一束光从矩形的一个顶点发射,角度为45度,遇到墙壁则反射, 只有遇到顶点时被吸收, 给你k个光传感器,光传播的速度是根号二m/s,问经过多少时间,光经过这个传感器, 若不能经过,则输出-1。思路:将矩形对称展开,把所有反射当做穿过看待,容易想到光在横纵坐标都为maxnx= m*n/gcd(m,n)(m,n的最小公倍数) 处吸收,因为光总是沿着y原创 2016-10-11 09:02:08 · 468 阅读 · 0 评论 -
codeforces 768 C Jon Snow and his Favourite Number(循环节)
题意:有一个长度n的数列,琼恩有一个喜爱的数x,琼恩每次去隔一个 数对数列里的数异或,请问k次操作后数列里最大的数和最小的数分别是什么解题思路:这种题一般来说操作后的数列是有循环节的,然后看到群里qc爸爸问有没有循环节不是2的例子的时候就更确定了。先去模拟下操作,然后每次操作出来的数列都去和之前得到的数列比较,看看是否有相同的数列,如果有就找到循环节了,只要让k对应到这个循环节原创 2017-02-21 09:53:30 · 1246 阅读 · 0 评论 -
hdu 5238 Calculator(线段树+中国剩余定理)
非常巧的一个题。运算过多,肯定得用数据结构维护一些东西,这里要维护的是映射关系,运算的本质其实就是函数,也就是映射。但是答案对29393取模,对0-29393的数维护映射在空间上和时间上都是撑不住的。如果仔细观察这个数可以发现,这个数本身不是素数,但是可以分解为4个素数的乘积7*13*17*19。如果你学过中国剩余定理,就应该知道已知一个数x对m1,m2,m原创 2017-07-29 08:20:00 · 399 阅读 · 0 评论