![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
同余模运算
林伏案
妖蛾子良多的范老爷
展开
-
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 · 405 阅读 · 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 · 390 阅读 · 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 · 327 阅读 · 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 · 406 阅读 · 0 评论 -
poj1811(miller_robin和pollard分解因数的随机性算法)
/*translation: 题意很简单,给定一个数,判断其是否为素数。如果不是素数,还需要给出最小的素因子。solution: 这道题不能用常规的素数算法来做,因为肯定超时。所以需要用到一种随机性算法。 称之为Miller_robin算法。该算法可以在一定的错误概率内判断一个数是否为素数。求最小的 素因子也需要用到另外一种随机性算法pollard-rho算法。该算法可以随机性地将一个原创 2016-10-26 15:12:00 · 314 阅读 · 0 评论 -
poj3641(快速幂,以及素性测试方法的总结)
/*translation: 给出一个数,判断其是否是伪素数。一个数是伪素数满足下面两个条件: 1,p不是素数。 2,满足费马定理a^p==a(mod p)solution: 快速幂简单题。 快速幂计算,然后朴素素性测试即可note: * 总结下素性测试的几个方法 1:朴素素性测试(反复平方法) 即从2~根号n根据素数的性质判断,如果有数字能够整除N.说明n不是素数。复杂度原创 2016-10-28 16:43:45 · 265 阅读 · 0 评论