|
沙发
楼主 |
发表于 2020-1-28 10:13:07
|
只看该作者
求逆元的方法很多,第一种是扩展的欧几里得算法(extGCD)
- #include<iostream>
- using namespace std;
- typedef long long LL;
- void extgcd(LL a,LL b,LL & d,LL & x,LL & y)
- {
- if (b==0) d=a,x=1,y=0; ///出口
- else
- {
- extgcd(b,a%b,d,y,x);
- y-=x*(a/b); ///背下来吧
- }
- }
- int inv(int a,int p)
- {
- LL d,x,y;
- extgcd(a,p,d,x,y);
- if (d==1) return (x+p)%p; ///这个很重要
- else return -1;
- }
- int main()
- {
- int n,p;
- cin>>n>>p;
- for (int i=1; i<=n; i++)
- cout<<inv(i,p)<<endl;
- return 0;
- }
复制代码
|
|