帮帮忙吧 qwq

很遗憾,您的《题解:P3811 【模板】模意义下的乘法逆元》不符合推荐标准。原因是:应正确使用取模符号:取模运算应使用 \bmod ,如 a mod b=c($a \bmod b = c$ );同余符号应使用 \equiv\pmod ,如 a≡c(modb)($a \equiv c \pmod b$ );请按照规范与反馈对题解进行修改,多次拒绝后仍未实质性修改将会封禁博客权限。。

我不想被封呀 qwq找不到错误了,贴个源代码:

# 定义

若 $\gcd(a,n)=1$,则存在 $a'\in\mathbb{Z} $,使得 $a\times a'\equiv 1(\bmod\ m)$,$a'$ 称为 $a$ 对模 $m$ 的数论倒数,或者称 $a'$ 为模 $m$ 的逆元。

接下来我要证明一件事情,我看很多题解里都没有证明,那就是题目让我们输出 $1$ 到 $n$ 这 $n$ 个整数模 $m$ 的数论倒数,但是对于每个数真的都有数论倒数吗?答案是肯定的,接下来来证明:

首先 $\left\{1,2,\dots,m\right\}$ 为模 $m$ 的完系,因为 $\gcd(a,m)=1$ 所以 $\left\{a,2a,\dots,ma\right\}$  也为模 $m$ 的完系,所以这里面一定存在某一项模 $m$ 余 $1$ ,即存在 $a'\in \left\{1,2,\dots,m\right\}$ 使得 $a\times a'\equiv 1(\bmod\ m)$。

# 解法

题目中说明了 $p$ 是质数,但是我们需要知道适用于任何情况的解法,就是扩展欧几里得解法,这里不多加赘述了,这里作者介绍线性递推解法。

我们设 $k=[\frac{p}{i}],p=ki+q$ 。所以 $ki+q\equiv0(\bmod \ p)$,那么 $k\times i\times (i^{-1}\times q^{-1})+q\times (i^{-1}\times q^{-1})\equiv0(\bmod\ p)$,所以 $k\times q^{-1}+i^{-1}\equiv0(\bmod\ p)$,那么 $i^{-1}\equiv-k\times q^{-1}(\bmod\ p)$,也就是说 $i^{-1}\equiv-[\frac{p}{i}]\times q^{-1}(\bmod\ p)$,用这个结论我们就可以求出 $1$ 到 $p-1$ 的逆元了!

使用时我们调用 $f_a$ 即可,如果 $a>p$ 那么就调用 $f_{a \bmod p}$。

# 代码


#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi  0
#define i_will signed
#define ak main
#define IMO ()
#define int long long
#define double long double
I AK IOI;
int n,p,f[3000005];
i_will ak IMO{
	//ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	cin>>n>>p;
	f[1]=1;
	cout<<inv[1]<<"\n";
	for(int i=2;i<=n;i++){
		f[i]=(-p/i*f[p%i]%p+p)%p;
		cout<<f[i]<<"\n";
	}
	i_ak ioi;
}


代码中需要注意如果是复数那么我们需要给它加 $p$。

显然代码中一层循环,复杂度为 $\mathcal{O(n)}$。

\bmod不是\bmod\!

1 个赞

如果你想要空开,可以这样 $\bmod{m}$

你代码用了么? @我命由我不由天

在此处键入或粘贴代码

@CZF2919 谢谢 qwq

这里有同余符号,mod不是用\pmod吗?

都可以的

???

额,还有,你代码会CE,inv数组要改成f数组! @我命由我不由天

都可以的!

@CZF2919

??sha

咋样? @我命由我不由天

@CZF2919 代码打错了

666,现在咋样?

@CZF2919 不知道志愿者还没有审核

但你代码只有32分啊

搞错了,没看到long long

?不是可以 AC 吗?

搞错了,sorry