【luogu 3811】【模板】乘法逆元
2018-06-17 21:46:54来源:未知 阅读 ()
题目背景
这是一道模板题
题目描述
给定n,p求1~n中所有整数在模p意义下的乘法逆元。
输入输出格式
输入格式:
一行n,p
输出格式:
n行,第i行表示i在模p意义下的逆元。
输入输出样例
10 13
1 7 9 10 8 11 2 5 3 4
说明
1≤n≤3×10?6??,n<p<20000528
输入保证 pp 为质数。
费马小定理:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define ll long long 6 using namespace std; 7 int n,p; 8 int fast(ll a,ll b){ 9 ll ans=1; 10 while(b){ 11 if(b&1)ans=(ans*a)%p; 12 a=(a*a)%p; 13 b>>=1; 14 } 15 return ans; 16 } 17 int main(){ 18 scanf("%d%d",&n,&p); 19 for(int i=1;i<=n;i++) 20 printf("%d\n",fast(i,p-2)); 21 return 0; 22 }
扩展欧几里得:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 void ex_gcd(int a,int b,int &x,int &y){ 7 if(b==0){x=1,y=0;return;} 8 ex_gcd(b,a%b,x,y); 9 int tmp=x;x=y;y=tmp-(a/b)*y; 10 } 11 int main(){ 12 int a,b,x,y; 13 scanf("%d%d",&a,&b); 14 for(int i=1;i<=a;i++){ 15 ex_gcd(i,b,x,y); 16 printf("%d\n",(x+b)%b); 17 } 18 return 0; 19 }
线性计算:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 int ans[3000010],n,p; 7 int main(){ 8 scanf("%d%d",&n,&p); 9 ans[1]=1;puts("1"); 10 for(int i=2;i<=n;i++){ 11 ans[i]=(long long)(p-p/i)*ans[p%i]%p; 12 printf("%d\n",ans[i]); 13 } 14 return 0; 15 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:【poj 3385】【模板】负环
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- C++ 模板类vector 2020-05-31
- C++ 模板类array 2020-05-31
- C++ 模板类vector 2020-05-30
- 单调队列模板【附例题】 2020-05-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash