牛客国庆集训派对Day1 I Steins;Gate(原根 + FFT)

 

 

上一次用到原根这个东西,应该是一年之前了吧……

所谓原根,就是指对于某个数字P,满足它的原根g,g的0~P-2次幂在模P的意义下互不相同,或者说g的1~P-1次幂在模P的意义下无不相同。一般来说,原根只能够进行枚举求解,但是由于原根一般较小(2或者3),所以可以接受。

对于本题,要求对于每一个数字ak计算在模P意义下,有多少个ai*aj等于ak。直接做显然是O(N^2)的,不能够满足条件。看到这个题目形式和数据范围,很容易往FFT等方向上想,但是这里的ai的范围是1e9级别,而且这个是乘法,直接FFT也是不行的。由于P满足是质数,所以我们考虑用原根。

我们令g为质数P的原根,那么对于一个数字ai,唯一存在一个数字bi,使得 g^{b_i}=a_i 。那么我们把所有的ai用这种形式表示,于是对于原本的式子ai*aj≡ak(mod P),有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值