数论
文章平均质量分 80
ACZone
这个作者很懒,什么都没留下…
展开
-
hdu4497 GCD and LCM 容斥原理
题意:三个数x,y,z,它们的最大公约数是g,最小公倍数是l。求有多少组x,y,z满足要求。 题解:首先想到gcd(x,y,z)=g,那么gcd(x/g,y/g,z/g)=1,lcm(x,y,z)=l/g。所以若l/g!=0,一定无解。现在考虑有解的情况,令x=x/g,y=y/g,z=z/g,根据唯一分解定理:x=p1^a1*p2^a1*...*pk^ak,y=p1^b1*p2^b1*...*pk^bk,,z=p1^c1*p2^c2*...*pk^ck,l/g=p1^m1*p2^m2*...*pk^mk。因原创 2017-08-07 20:29:03 · 403 阅读 · 0 评论 -
hihocoder1584 Bounce 2017icpc-北京赛区 扩展欧几里德
hihocoder1584 Bounce 2017icpc-北京赛区 扩展欧几里德 https://hihocoder.com/problemset/problem/1584 题意:在n*m的网格上,一颗小球左上方出发往右下的格子走,碰到边界就反弹,当小球到达角落就停止运动。求小球只经过一次的格子的数量。 题解:如图(3*4为例),可以把每次反弹后的线路展开,每次反弹就增加m-1(碰到上下边界)或者n-1(碰到左右边界)。因为小球是45度方向,所以最后展开一定是正方形。于是可以列出不定方程(m-1)*x+m原创 2017-09-23 20:06:29 · 316 阅读 · 0 评论 -
51nod1119 机器人走方格 v2 费马小定理求逆元
51nod1119 机器人走方格 v2 费马小定理求逆元 题解:向右总共走n-1,向左总共走m-1,总步数就是n+m-1。所以答案就是C(n+m-1,n-1),n+m-2步中挑其中n-1步向右。本题数据较大,不可以通过单纯求组合数的公式(杨辉三角或者单个暴力)或者dp。从组合数公式入手,由于除法不可取余,需要求逆元。根据费马小定理有:a和n互质,那么a^(n-1)=1(mod n)。所以a*a^(n-2)=1%(mod n),即a的逆元就是a^(n-2)。原创 2017-08-22 13:19:04 · 295 阅读 · 0 评论 -
hdu2197 本原串 枚举因子 思维
题解:判断本原串有多少个,可以通过所有01串-非本原串。公式f[n]=2^n-2-∑f[i],(i是n的因子,除了1 。2是全0和全1的情况。这个看代码注释理解,为什么2和求和不放在一起以及i除了因子1)。后面这个公式表示所有非本原串可以通过本原串得到,这个数组可以通过记忆化搜索得到。原创 2017-08-07 15:03:25 · 258 阅读 · 0 评论 -
hdu2582 f(n) 找规律 素数筛
题意:f(n)=Gcd(3)+Gcd(4)+...+Gcd(n),Gcd(n)为组合数C(n,i)的gcd,1<=i<=n-1。 题解:写出几项结合组合数的公式可以发现。当k的因子中不止一个素因子时gcd(k)=1,只有一个素因子时gcd(k)=该素因子。然后前几天学的素数筛法就很巧妙的筛出了这两种k。原创 2017-08-07 14:07:26 · 587 阅读 · 0 评论 -
hdu1452 Happy 2004 x^y的因子和 逆元 快速乘法
题意:求2004^x的所有因子和对29取余的结果。 题解:因为所有数都可以被分解成a=p1^c1*p2^c2*...*pk^ck,并有约数和定理:sum=(p1^0+...+p1^c1)*(p2^0+...+p2^c1)*...*(pk^0+...+pk^ck)。每一项可以通过等比数列求和得到。2004=2^2*3*167,所以答案就是2^(2*n+1)*3^(n+1)*167^(n+1)/(2*166)。由于需要取余,所以不能直接除要求出2*166的逆元改为相乘。原创 2017-08-07 12:42:21 · 708 阅读 · 0 评论 -
51nod1058 N的阶乘的长度+51nod1130 N的阶乘的长度 V2(斯特林近似) 学习斯特林公式
51nod1058 N的阶乘的长度+51nod1130 N的阶乘的长度 V2(斯特林近似) 学习斯特林公式 题意:N的阶乘的长度(都是水题,只是记一下公式)。 题解:由斯特林公式:n!=sqrt(2*π*n)*(n/e)^n。 那么长度log一下即可,具体看代码。原创 2017-08-21 14:07:00 · 245 阅读 · 0 评论 -
hdu6069 Counting Divisors 质因数分解 区间筛
题意:d[i]:表示i的所有因子个数。现在求∑d(i^k),i∈[l,r]。 题解:首先每个数都可以分解成:i=p1^c1*p2^c2*...*pn^cn,其中p1,p2,...,pn均为质数。那么d[i]就可以表示成(p1+1)*(p2+1)*...*(pn+1),所以d[i^k]=(p1*k+1)*(p2*k+1)*...*(pn*k+1)。所以本题先对素数打表,但是直接枚举l-r仍然会超时。可以反过来枚举每个质数,用筛法的方式去枚举质数的每个倍数,这样就比原来快多了。原创 2017-08-06 21:04:25 · 245 阅读 · 0 评论 -
UVA 12493 Stars(扩展欧几里德+欧拉函数)
UVA 12493 Stars(扩展欧几里德+欧拉函数) 题意:n个点将一个圆分成n段圆弧,以其中一个点为起点开始,每次走k步,走回起点后,要经过每一个点,求这样的k有几个。 题解:设目标点为a,列出方程(a+k*x)%n=0。k为步长,x为次数。变形得k*x+n*y=a。根据扩展欧几里德,不定方程有解当且仅当b|gcd(k,n)。而1<=b<n,得出gcd(k,n)只能为1。即求与n互质的k有几个,那就是欧拉函数了。根据题意左右对称算一个,所以答案就是euler(n)/2。原创 2017-08-03 16:59:08 · 263 阅读 · 0 评论 -
POJ - 3090+SPOJ - VLATTICE (欧拉函数 莫比乌斯反演)
POJ - 3090+SPOJ - VLATTICE (欧拉函数 莫比乌斯反演) 原题:https://vjudge.net/problem/10261/origin+https://vjudge.net/problem/SPOJ-VLATTICE 题意:求这样的数对x,y,满足(0,0)到(x,y)连线上无整数点。poj这题是在二维平面上,spoj是在三维空间上。 两道题都可以转化为gcd==1,都可以用莫比乌斯反演解决。原创 2017-08-03 15:30:16 · 464 阅读 · 0 评论 -
hdu1695 GCD 学习莫比乌斯反演
hdu1695 GCD 学习莫比乌斯反演原创 2017-08-03 13:17:35 · 284 阅读 · 0 评论 -
CodeForces - 735D Taxes 数论 哥德巴赫猜想和弱哥德巴赫猜想
题意:将一个数n分成若干份,价值是每份的它的最大因子和(不是本身),求最小价值。如27分成3 11 13,价值就是3。 题解:最优的方法就是把这个数尽可能的分成素数。如果对于素数那么价值就是1,那么对于合数呢。根据哥德巴赫猜想有:任何大于2的偶数都可以分成两个质数和。所以偶数除2之外的价值就是2。根据弱哥德巴赫猜想有:任何大于7的奇数都可以分成三个质数和。但是对于奇数这么分不一定是最优的,如13,可以分成2 11和3 3 5。其实可以发现因为质数中只有2这个偶数,所以如果n-2是素数的话,那么价值就是2了。原创 2017-08-09 16:55:33 · 306 阅读 · 0 评论 -
poj2115 Looooops(扩展欧几里德模板)
poj2115 Looooops(扩展欧几里德模板) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; variable += C) statement; I.e., a loop which starts by setting variable to value A and while variable is not equal to B,原创 2017-08-02 11:14:06 · 310 阅读 · 0 评论 -
uva11426(欧拉函数)
uva11426(欧拉函数) 题意:求sum(gcd(i,j))(1<=i<j<=n,1<n<4000001) 题解:这题是欧拉函数的妙用。sum[n]=sum[n-1]+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n)。设fgcd(x,n)=i。(1<=x<n)。两边同除以i这个gcd,就变成gcd(x/i,n/i)=1。那么求出cnt(x/i),再乘上i,就是对满足约数gcd(x,n)=i的gcd求和了。而cnt(x/i)就是euler(n/i)。所以先筛法打表欧拉函数,再求和即可。原创 2017-08-02 09:01:07 · 254 阅读 · 0 评论 -
hdu1852 Beijing 2008 x^y的因子和2.0
题意:求2008^n的所有因子和m对k取余,然后求2008^m对k取余。 题解:http://blog.csdn.net/weixin_36571742/article/details/76832624。这题是类似的一题,可以除法可以通过求逆元。因为那题的mod是29,gcd(2*166,29)==1,存在逆元。但是这里的gcd(250,k)不一定满足等于1,也就是说不一定存在逆元。那么观察我们要求的m,m肯定有250这个分母,所以可以表示成m=x/250。m%k=(x/250)%k转化为(x/(250*k原创 2017-08-07 13:25:20 · 645 阅读 · 0 评论 -
hdu6053 TrickGCD 莫比乌斯函数 容斥原理
题意:给你一个a数组,要求找出b数组。b数组满足:1<=bi<=ai,gcd(b1,...,bn)>=2。求这样的b数组有多少个。 题解:gcd(b1,...,bn)=k,那么在k下b数组有a1/k*a2/k*...*an/k。根据容斥原理:ans=+(k=一个素数的积)-(k=两个素数的积)+(k=三个素数的积)-...,其实可以看出前面的系数就是莫比乌斯函数的相反数。但是枚举每个k,再遍历a数组计算答案,复杂度就是o(n^2)。可以在遍历a数组上想办法,设sum[m]表示1<=a[i]<=m的a[i]的原创 2017-08-08 13:34:01 · 327 阅读 · 0 评论 -
poj1026 Cipher (循环节)
poj1026 Cipher (循环节) Bob and Alice started to use a brand-new encoding scheme. Surprisingly it is not a Public Key Cryptosystem, but their encoding and decoding is based on secret keys. They chose the secret key at their last meeting in Philadelphia on Feb原创 2017-08-01 15:04:00 · 288 阅读 · 0 评论 -
poj3270 Cow Sorting 置换环+贪心
poj3270 Cow Sorting 置换环+贪心 Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...100,000. Since grumpy cows are more likely to damage FJ's milking equipment, FJ would like原创 2017-07-31 22:32:13 · 612 阅读 · 0 评论 -
CodeForces - 963A Alternating Sum 逆元 等比数列
CodeForces - 963A Alternating Sum 逆元 等比数列 http://codeforces.com/problemset/problem/963/A 题意:求解 n ∑ i = 0 s i a n − i b i ∑i=0nsian−ibi mod 10 9 + 9 ,si表示正负,并告诉你前k个si的符号,且满足 s i = s i − k 。 题解:令u= k ∑ i = 0 s i a n − i b i ∑i=0nsian−ibi ,z=(b/a原创 2018-04-18 11:56:59 · 319 阅读 · 0 评论