社区讨论
80pts求条
P3811【模板】模意义下的乘法逆元参与者 3已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mhjusfod
- 此快照首次捕获于
- 2025/11/04 08:51 4 个月前
- 此快照最后确认于
- 2025/11/04 08:51 4 个月前
P3811
我的解法一(费马小定理): 32pts
CPP我的解法一(费马小定理): 32pts
#include<iostream>
using namespace std;
int qp(int a,int b,int p){
int ans=a%p,res=1;
while(b){
if(b&1)res=res*ans%p;
ans=ans*ans%p;
b>>=1;
}
return res;
}
int main(){
//费马小定理求
//a^(p-1)=ax
//x=a^(p-2)
int n,p;cin>>n>>p;
for(int i=1;i<=n;i++){
cout<<qp(i,p-2,p)<<'\n';
}
return 0;
}
我的解法二(扩展欧几里得算法):
80pts
CPP#include<iostream>
using namespace std;
/*
aX+bX=1
bX+(a-[a/b]*b)Y=1
Ya+(X-[a/b]Y)b=1
*/
//x=Y,y=X-[a/b]Y
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
void exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return;
}
exgcd(b,a%b,x,y);
int tmp=y;
y=x-(a/b)*y;
x=tmp;
}
//ax+by=0
//a*b/gcd(a,b)+a*b/gcd(a,b)=0
//x=b/gcd(a,b),y=a/gcd(a,b)
void ze(int a,int b,int &x,int &y){
int c=gcd(a,b);
x=b/c;
y=a/c;
}
int inv(int a,int b){
int x,y;
exgcd(a,b,x,y);
int jx,jy;
ze(a,b,jx,jy);
while(x<0)x+=jx;
return x;
}
int main(){
int n,p;cin>>n>>p;
for(int i=1;i<=n;i++)cout<<inv(i,p)<<'\n';
return 0;
}
解法三(未知):
100pts
CPP回复
共 8 条回复,欢迎继续交流。
正在加载回复...