有些说法不是很严谨,毕竟是给有数学基础而对 OI 不熟悉的人讲随机模数 CRT 和其他的一些东西的,所以喷的话留情 qwq
已知 三数,,其中
多组输入,数据组数
你需要判断 是否等于
讲个笑话,原来的题面是这样的:
给一个 ,用下发的随机数据生成器生成 三数,,其中
多组输入,数据组数
你需要判断 是否等于
这个更苛刻,把三个数搞出来常数大点就挂了(
挂掉的做法 1:正常/压位高精
就是开一个数组,每一位塞到数组的一个数中,拿小学的列竖式的方法算
压位高精是指把数组省着用,但思路不变
为啥会挂?会小学数学列竖式的都知道,每一位都要操作,那就是操作 次,比对 次操作,算起来就是 次操作至少
过了 次操作就会挂,即使存的下,也跑不动(
挂掉的做法 2:Python,Ruby 等自带高精的语言
众所周知 Python 慢得离谱,读入就超时了,哈哈
Ruby 差不多吧,肯定能卡掉(已经卡掉了)
挂掉的做法 3:FFT
FFT(Fast Fourier Transform),快速傅里叶变换
不会多项式/kk
https://www.luogu.com.cn/blog/Flagz/chao-yang-xi-yi-dong-fft-kuai-su-fu-li-xie-bian-huan-ji-dai-ma-shi-xi 自己看自己学吧,学会了教教我(
你 的肯定太慢了过不了啊
补充: 是什么鬼
比如做法 1, 的每一位都要和 乘,操作 次,那么时间复杂度就是
时间复杂度是啥?这个百度百科吧,不过不是很重要(
正解:随机模数 CRT
CRT,中国剩余定理(不会的补小学奥数去)
https://www.luogu.com.cn/blog/Loading---99/solution-p1495
其中有个细节
可以构造出多个 满足要求
但是如果 足够大,除了最小的以外,其他的都大于最大边界,那就非常 OK 了
而且模数有个性质,
所以就可以选几个 ,然后如果 ,就可以认为是正确的了
得随机选,否则就能用 CRT 构造出反例,gg
当然 的个数和大小得慎重考虑,否则会时间不够或成功率低,这个要平衡
这个挺快的,如果容许犯错的话。可以开到原题面那么多,然后卡卡常搞搞,极限卡过没问题应该