ACM数论
罗博士
这个作者很懒,什么都没留下…
展开
-
快速傅里叶变换FFT的迭代实现
《快速傅里叶变换的相关定义、原理及其递归算法》描述了y原创 2014-06-18 16:19:27 · 6385 阅读 · 0 评论 -
FFT的迭代程序实现——hdu1402
《快速傅里叶变换FFT的迭代实现》描述了最简单的FFT的迭代实现,在此基础上可以用它进行原创 2014-06-18 20:15:21 · 1417 阅读 · 0 评论 -
快速傅里叶变换的相关定义、原理及其递归算法
快速傅里叶变换FFT是离散傅里叶变换DFT的一种快速算法,实际上诸如Matlab等科学计算软件都已经实现了FFT,只需调用相应的接口即可。在ACM里,FFT的典型应用就是大数的乘法或者多项式的乘法。顺便,如果题目规模不是很大,有关大数的运算推荐使用Java语言,使用java.math.BigInteger包完成;包括高精度运算,可以使用BigDecimal包完成。任何情况下,会一门外语总是很重要的原创 2014-06-18 15:15:26 · 11325 阅读 · 3 评论 -
莫比乌斯反演入门题目
莫比乌斯反演入门题目整除分块[洛谷P2568: GCD](https://www.luogu.org/problem/P2568)[SPOJ VLATTICE](https://www.spoj.com/problems/VLATTICE/en/)[hdu1695: GCD](http://acm.hdu.edu.cn/showproblem.php?pid=1695)[BZOJ 2005: 能量...原创 2019-11-07 15:43:39 · 235 阅读 · 0 评论 -
狄利克雷卷积与莫比乌斯函数
狄利克雷卷积与莫比乌斯函数数论函数狄利克雷卷积莫比乌斯函数若想使用莫比乌斯反演,则熟练掌握狄利克雷卷积包括定义、记号以及相关的性质、证明等是非常有好处的。数论函数数论函数也称作算术函数,就是定义在正整数上的函数,也可看作是一个数列。例如:f(n)=2n−1f(n)=2n-1f(n)=2n−1就表示了一个数论函数,其实就是:[1,3,5,7,9,...][1,3,5,7,9,...][1...原创 2019-11-05 15:43:18 · 2264 阅读 · 0 评论 -
POJ2891
求解线性同余方程组,模数可能不两两互质,因此需要使用合并方程的方法。#include <stdio.h>typedef long long int llt;//The extended Euclidean algorithm implemented by iteration//returns gcd(a,b), and x, y are satisfied with ax...原创 2018-07-06 13:18:16 · 747 阅读 · 2 评论 -
中国剩余定理与线性同余方程组求解
线性同余方程组中国剩余定理线性同余方程组实际上一元一次线性同余方程组,形式如下: ⎧⎩⎨x≡r0(modm0)x≡r1(modm1)⋯{x≡r0(modm0)x≡r1(modm1)⋯\begin{cases}x\equiv{r_0}({\rm{mod}}\,m_0) \\x\equiv{r_1}({\rm{mod}}\,m_1) \\\cdots\end{ca...原创 2018-07-06 13:06:56 · 4641 阅读 · 2 评论 -
欧几里德算法与扩展的欧几里德算法及乘法逆元
欧几里德算法扩展的欧几里德算法数学公式欧几里德算法欧几里德算法用于求解最大公倍数,也就是辗转相除法。其结论非常简洁,对任意整数aaa、bbb,有: gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b) 其中,%代表取模运算,也就是C++语言中的运算符。因此,欧几里德算法实现起来也非常简单。...原创 2018-07-05 23:25:10 · 1716 阅读 · 0 评论 -
大素数测试的Miller-Rabin算法
Miller-Rabin算法本质上是一种概率算法,存在误判的可能性,但是出错的概率非常小。存在严格的理论推导。费尔马小定理如果pp是质数且(a,p)=1(a,p)=1,则有ap−1≡1(modp)a^{p-1}\equiv1({\rm mod}\,{p})。 当然反过来不一定成立。即当ap−1%p=1a^{p-1}{\%}{p}=1时,pp未必是质数。但是这个概率比较小。所以利用费原创 2015-09-08 15:50:06 · 4191 阅读 · 3 评论 -
Pollard-Rho方法分解整数因子
对于大整数而言,要找出其因子是比较困难的,事实上仍然没有很好的解决方法。不过在ACM里面有几种“标准的”方法可以使用,例如Pollard-Rho方法。 假设题目是求nn的因子,Pollard-Rho方法的基本思想是任意给定整数yy和xx,求gcd(y−x,n)gcd(y-x,n)。注意,所有运算都是在模nn的条件下进行的。如果gcd≠1且gcd≠ngcd\neq1且gcd\neq{n},则gcdg原创 2015-09-10 10:52:28 · 4245 阅读 · 1 评论 -
POJ1845——A的B次方的因子和
算术基本定理根据算术基本定理,任何一个大于1的自然数n,能够唯一表示为 n=∏ipirin=\prod_i{p_i}^{r_i} 其中,pip_i是n的第ii个质因子。一般将质因子按升序排列,则上述表示形式是唯一的。例如:12=22×3112=2^2\times3^1因子个数nn的所有的因子的个数为: ∏i(1+ri)\prod_i(1+r_i) 例如12的因子个数为(2+1)×(1+1)=原创 2015-09-10 22:37:30 · 879 阅读 · 0 评论 -
POJ1528——因子和
因子和可以参考这里,虽然这道题数据很弱,可以暴力过。但是可以用来练习。注意输入为1时的情况。暴力法#include <cstdio>int proc(int n){ int s = 1; for(int i=2;i<n;++i){ if ( 0 == n % i ) s += i; } return s;}int main(){ printf原创 2015-09-10 23:13:23 · 548 阅读 · 0 评论 -
欧拉函数及其两种程序实现
欧拉函数phi(x)是指不大于正整数x的与x互质的正整数的个数。例如phi(1)=1,phi(2)=1,phi(3)=2,phi(4)=2,phi(5)=4,phi(6)=2等等。很显然,对每一个质数p,phi(p)=p-1。而对每一个质数的幂phi(p^n)=(p-1)×p^(n-1)。欧拉函数是积性函数,如果m、n互质,那么phi(m×n)=phi(m)×phi(n)。 欧拉函...原创 2014-04-18 17:16:09 · 3012 阅读 · 1 评论 -
素数筛法程序实现
质数是数论中的关键所在,因此很多ACM的题目都需要求出或者判断质数。判断一个数是否为质数很简单。bool isPrime(int n){ for(int i=2;i*i if( 0 == n % i ) return false; return true;} 一般而言,相关题目的测试数据都不止一个case,因此比较好原创 2014-04-18 17:57:38 · 1465 阅读 · 0 评论