=====数论=====
文章平均质量分 61
林伏案
妖蛾子良多的范老爷
展开
-
uva11582(同余模基础)
/*solution: 同余模运算 首先要观察到其周期性,设F[i] = f[i]%n; F[i]呈现周期性的规律。 找到这个规律的周期t,就可以轻松求出F[a^b]。note: 注意对a^b%n的正确姿势是pow_mod(a%t[n], b, t[n])。 而不是pow_mod(a, b, t[n])。这个很容易写错!date: 2016.8.19*/#include原创 2016-08-19 19:51:44 · 431 阅读 · 0 评论 -
poj2115(欧几里的算法,线性同余方程)
/*translation: 求循环体for(int i = A; i != B; i = (i + C) % 2^k)执行多少次solution: 扩展欧几里的算法求解线性模方程。 该问题就是求解(A+C*x)%n=B, 其中n为2^k。 变形:(A+C*x)==B(mod n) -> C*x == (B-A)(mod n)note: 对于方程a*x==b(mod n),令d=g原创 2016-10-14 16:27:28 · 434 阅读 · 0 评论 -
uva1637(记忆化搜索,离散概率)
/*translation: lrj p327solution: 动规,记忆化搜索,全概率公式 用map, double>记录下当前的状态。然后按照记忆化搜索的dp即可note: 1:这种状态复杂的记忆化搜索不好写,怎样表示状态很关键,同时这道题一开始用double类型的d数组来记忆 导致输出nan。 2:这道题的记忆化搜索写法的状态表示值得借鉴,特别是记忆数组和状态表示。原创 2016-09-29 21:43:38 · 316 阅读 · 0 评论 -
poj1811(miller_robin和pollard分解因数的随机性算法)
/*translation: 题意很简单,给定一个数,判断其是否为素数。如果不是素数,还需要给出最小的素因子。solution: 这道题不能用常规的素数算法来做,因为肯定超时。所以需要用到一种随机性算法。 称之为Miller_robin算法。该算法可以在一定的错误概率内判断一个数是否为素数。求最小的 素因子也需要用到另外一种随机性算法pollard-rho算法。该算法可以随机性地将一个原创 2016-10-26 15:12:00 · 324 阅读 · 0 评论 -
poj2429(miller_robin算法和pollard分解质因数)
/*translation: 给出两个数的gcd,lcm的值,求两个数分别是多少?有多解时输出两数和最小的一组。solution: miller-robin和pollard素因子分解算法 这道题可以参考poj1811(模板),根据规律a*b == gcd(a,b)*lcm(a,b)很容易想出分解质因数 然后凑出a,b来暴力比较求出答案。但是由于数据范围太大。所以常规的素数分解算法不行。原创 2016-10-26 17:40:47 · 1871 阅读 · 0 评论 -
poj3421(多重集排列,唯一分解定理)
/*translation: 给出一个数,求能够形成的x数链最长是多少?(x数链是指以1开始,以n结尾,其中任意相邻的两个数,前面的数都能整除后面)solution: 多重集排列计数,唯一分解定理 由x数链的性质可以发现,将n分解为其质因数相乘的形式后,数链中任何一个数必定是这些质因数的某个组合,且任意相邻的2个质因数 中后面的数必定是在前面的数的质因数的组合的基础上再乘上另外的一个质原创 2016-10-27 21:05:39 · 692 阅读 · 0 评论 -
poj3126(埃氏筛法,双向bfs)
/*translation: 给出一个4位素数,要将其转化为另外一个指定的素数。每次只能改变其中一位数字,且期间所有的数字全为素数。 问最少要经过多少步骤?solution: 埃氏筛法,双向bfs 打个表,再广搜一下即可,水题。为了提高下难度,所以改用双向广搜。0ms过!note:date: 2016.10.28*/#include #include #include原创 2016-10-28 11:43:55 · 555 阅读 · 0 评论 -
poj3641(快速幂,以及素性测试方法的总结)
/*translation: 给出一个数,判断其是否是伪素数。一个数是伪素数满足下面两个条件: 1,p不是素数。 2,满足费马定理a^p==a(mod p)solution: 快速幂简单题。 快速幂计算,然后朴素素性测试即可note: * 总结下素性测试的几个方法 1:朴素素性测试(反复平方法) 即从2~根号n根据素数的性质判断,如果有数字能够整除N.说明n不是素数。复杂度原创 2016-10-28 16:43:45 · 278 阅读 · 0 评论 -
poj1222(高斯消元)
/*translation: 有6*5的开关,每次按下一个开关,与之相邻的4个开关状态也会随之改变。给定开始状态,求使得所有开关为0的方法solution: 高斯消元法 首先,假设在开始状态的基础上按下第二行第二列的开关,相当与在原来矩阵的基础上加上矩阵 0 1 0 0 ... 0 1 1 1 0 ... 0 0 1 0 0 ... 0 . . . . . . . . .原创 2016-11-09 16:23:49 · 303 阅读 · 0 评论 -
poj1930(无限循环小数化成分数)
/*translation: 给出一个无限循环小数,把该小数改写成以最简分数表示的形式solution: 如果能够求出分数的表示形式的话,那么利用gcd就可以化简。但是想了好久没有想出怎么化成分数形式。 后来百度"无限循环小数化分数",在百科上找到了答案。套用百科上的第三种公式即可。note: # 一开始样例都过不了,后来发现小数部分的下标范围出现错误。改下就过了。 * 写了两个版原创 2016-10-31 22:07:07 · 1636 阅读 · 0 评论 -
uva11181(概率)
/*translation: 已知有n个人,其中有r个人买东西。已知每个人买东西的概率为p[i],求实际每个人 买东西的概率?solution: 概率 设Ei为事件:第i个人买东西,E:有r人买东西。则答案就是求p(Ei|E). 如此以来,用dfs枚举每个人买或者不买。即可求出来p(E)和p(Ei*E)note:date: 2016.9.28*/#include #in原创 2016-09-28 21:36:29 · 338 阅读 · 0 评论 -
uva1636(离散概率)
/*translation: 给出一串字符串(只包含01),第一个选择的位置是0,之后有两种选择,一种是跳到一个随机的位置, 另外一种是跳转到下一个位置。希望下一个位置是0的话,应该是跳到一个随机的位置(输出ROTATE) 还是跳到下一个位置(SHOOT)。solution: 离散概率。 直接利用概率公式即可解决。note:date: 2016.9.28*/#includ原创 2016-09-28 17:38:14 · 293 阅读 · 0 评论 -
uva12169(同余模运算+暴搜)
/*translation: 根据公式x[i] = (a*x[i-1] + b) % 10001 可以生成一串数列。现在给出x[1],x[3],x[5]...x[2*T-1], 要求其下标(从1开始)为偶数的部分。solution: 其实跟数论没太大关系,纯暴力。date: 2016.8.24*/#include <iostream>#include <cst原创 2016-08-24 20:55:24 · 408 阅读 · 0 评论 -
uva10288(数学期望)
/*translation: 每张彩票上面都有一种图案,共有n种,问在平均情况下最少需要买多少张彩票才能集齐n种。solution: 期望 假设已经集齐了k张图案,所以要找到一张新的图案平均需要购买n/(n-k)张彩票。所以总次数为 sum{n/(n-i)}其中i取值范围[1, n]。note:date: 2016.10.8*/#include #include us原创 2016-10-08 21:30:08 · 624 阅读 · 0 评论 -
uva1639(数学期望,利用对数减少浮点类型数据的精度损失方法)
/*translation: 两个盒子各有n个糖果,每天随机选一个盒子(概率为p,1-p)并且吃掉里面的一颗糖果。 知道有一天打开盒子时发现是空的,求此时另外一个盒子里面糖果的个数的数学期望?solution: 数学期望,利用对数减少浮点类型数据的精度损失方法。 假设另外第二个个盒子里面剩下了i颗,则概率为C(2n-i,n)*p^n*(1-p)^(n-i) 同理,如果是地一个盒子里原创 2016-10-08 21:31:40 · 420 阅读 · 0 评论 -
uva12230(数学期望)
/*translation: 村庄A,B之间有若干条河流,每条河流上的船速各自保持不变。告诉河流条数,两个村庄之间的距离 以及每条河流的距离A村庄的位置,宽度,船的速度。求A到B的时间的期望。solution: 因为开始时船的位置随机,所以期望过河时间为2L/v。加上在路上行走的时间就是答案。note:date: 2016.10.8*/#include #include原创 2016-10-08 21:39:13 · 463 阅读 · 0 评论 -
uva1635(唯一分解定理,杨辉三角二项式递推公式)
/*translation: 题意见lrj,p320solution: 唯一分解定理,杨辉三角迭代公式 根据杨辉三角的迭代公式即可很容易得出最后一项的每一项系数。根据是否能够整除m,就可以得出这一项是否跟 最后的结果有关。但是问题在于最后一项的数据范围太大,必须用高精度才能保存。所以直接对m取余来求解是行 不通的。所以就必须用唯一分解定理:对m进行素因子分解,然后对于每一项m的素因原创 2016-09-26 12:23:27 · 1274 阅读 · 1 评论 -
uva10820(欧拉函数,排列组合)
/*translation: 给定一个数n,任意两个元素组成的二元组(x,y).其中xy均小于n。任意两个二元组之间定不存在 (k*xi, k*yi) = (xj, yj);问这样的二元组有多少个。solution: 排列组合,欧拉函数 满足条件的二元组的两个元素之间肯定互素,如果两个元素不互素,肯定存在一个整数k使得有二元组 (x/k, y/k)。与题意相反。所以利用欧拉函数很容原创 2016-09-26 16:47:25 · 473 阅读 · 0 评论 -
poj2635(大整数求余)
/*translation: 输入两个数K,L。其中4 <= K <= 10^100 2 <= L <= 10^6。k是两个素数的乘积,现在要求检测这两个数是否都大于L。solution: 同余模运算,大整数求余,埃氏筛法。 首先可以很容易想到用埃氏筛法求出素数表,然后遍历检查是否是k的因子。但关键在于k的数字太大,怎么表示是个问题。解决办法是 用一个字符类型的数组来表示。并转换成10原创 2016-10-12 19:49:15 · 351 阅读 · 0 评论 -
poj3292(筛选法)
/*translation: 一个H-number是所有的模四余一的数。如果一个H-number是H-primes 当且仅当它的因数只有1和它本身(除1外)。 一个H-number是H-semi-prime当且仅当它只由两个H-primes的乘积表示。H-number剩下其他的数均为H-composite。 给你一个数h,问1到h有多少个H-semi-prime数。solution:原创 2016-10-12 22:04:28 · 307 阅读 · 0 评论 -
poj1845(唯一分解定理,等比数列求和,约数个数公式)
/*translation: 输入两个数A,B。求A^B%9901的值solution: 唯一分解定理, 首先将a进行质因数分解,存储在factor二维数组当中。其形式可以描述为: p1^q1 * p2^q2 *...* pn^qn。而后要求所有因子的和,可以用到公式: 约数个数=(1+p1+p1^2+...+p1^q1)...(1+pn+pn^2+pn^qn)。根据这个 公式,再原创 2016-10-13 21:06:58 · 760 阅读 · 0 评论 -
poj3185(开关问题一般解法,以及高斯消元解法)
/*translation: 有20只碗,现在要使得它们全部变成碗口朝上的状态。至少需要多少操作步骤。solution: 按照开关问题解,但是要从最左端和最右边分别开始求解,然后比较。note: #:按照poj3276的解法应该就可以解出来,但是为毛在这里还得对从左和从右求解的结果比较? 难道poj3276的解法本身就有问题?坑待填...date: 2016.11.8*/#原创 2016-11-13 21:39:51 · 690 阅读 · 0 评论