我们由题解知inv[i]≡−⌊ip⌋∗inv[p%i] (modp)
再经过一番推导,我们可以知道inv[i]=(p−p/i)∗inv[p%i]%p;
我们可以知道inv[i]是属于0到p−1的
不过我们可以发现inv[i]不可能等于0
证明(?):
假设之前的的inv都不等于0,对于inv[i]来说当且仅当(p−p/i)或者之前的inv为p或0才会使得现在的inv为0
因为n<=p,且i从2开始枚举,所以前面一项显然不为0,也不为p
根据题目条件以及假设,后面一项也不会为0或p
所以我们可以知道inv[i]是属于1到p−1的
我们考虑另一种方法,先直接对后面的取模,也就是inv[i]=−⌊ip⌋∗inv[p%i]%p
这个时候inv[i]是为负数的,范围在−p+1到0
考虑到−⌊ip⌋∗inv[p%i]不可能为0或p,所以inv[i]的范围在−p+1到−1
因此我们对inv[i]加上p就可以有inv[i]的范围在1到p−1
我们就可以得到公式inv[i]=p−⌊ip⌋∗inv[p%i] (modp)
这时候问题来了,对于同一道题目,两种写法在洛谷上都可以AC,但是在本校一模一样的题目上会有一个点会WA掉,
想问一下后面一种写法是否是正确的,如果错误,是否可以构造一组数据出来