P3811 【模板】乘法逆元

一个刚学数论的萌新,总结了一下这题的大部分做法

//一、费马小定理+快速幂  O(nlogn) 64分
#include<cstdio>
using namespace std;
typedef long long ll;
int a,b;
inline ll pow(ll x,ll p) {
ll ans=1;
x%=b;
while(p) {
if (p&1) ans=ans*x%b;
x=x*x%b;
p>>=1;
}
return ans%b;
}
inline void write(int x) {
if(x>9) write(x/10);
putchar(x%10^48);
}
int main() {
scanf("%d%d",&a,&b);
for (int i=1; i<=a; i++) {
write(pow(i,b-2));
putchar('\n');
}
}
//二、exgcd O(nlogn)  80分

#include<cstdio>
using namespace std;
typedef int ll;
ll x,y,a,b;
inline void exgcd(ll a,ll b) {
if (!b) x=1,y=0;
else {exgcd(b,a%b); int t=x; x=y,y=t-a/b*y;}
}
inline void write(int x){
if(x>9) write(x/10);
putchar(x%10^48);
}
int main() {
scanf("%d%d",&a,&b);
for (int i=1; i<=a; i++) {
exgcd(i,b);
write((x%b+b)%b);
putchar('\n');
}
}
//三、费马小定理+快速幂+线性筛 合数O(1),质数O(nlogn) 80分
#include <cstdio>
using namespace std;
typedef long long ll;
ll n,p,inv[3000010],vis[3000010];
ll pow(ll x,int b) {
ll ans=1;
for (int i=b; i; i>>=1,x=x*x%p)
if (i&1) ans=ans*x%p;
return ans%p;
}
void work() {
inv[1]=vis[1]=1;
for (int i=2; i<=n; i++)
if (!vis[i]) {
vis[i]=1;
inv[i]=pow(i,p-2);
for (int j=2; j<=i && j*i<=n; j++)
vis[i*j]=1,inv[i*j]=(inv[i]*inv[j])%p;
}
}
int main() {
scanf("%lld%lld",&n,&p);
work();
for (int i=1; i<=n; i++) printf("%lld\n",inv[i]);
return 0;
}
//四、阶乘+1次快速幂 O(n) 100分 607ms

#include<cstdio>
#define ll long long
using namespace std;
int n,p;
ll c[3000005],ans[3000005];
ll ksm(ll x,ll y)
{
ll an=1;
while(y)
{
if(y&1)
an=(an*x)%p;
x=(x*x)%p;
y>>=1;
}
return an;
}
int main()
{
scanf("%d%d",&n,&p);
c[0]=1;
for (int i=1;i<=n;i++) c[i]=(c[i-1]*i)%p;
ll pow=ksm(c[n],p-2),k;
for(int i=n;i;i--)
{
k=(pow*i)%p;
ans[i]=(pow*c[i-1])%p;
pow=k;
}
for(int i=1;i<=n;i++)
printf("%lld\n",ans[i]);
}
//五、线性递推 O(n) 100分 560ms
#include<cstdio>
#define ll long long
using namespace std;
ll inv[3000005]={0,1};
int main()
{
int n,p;
scanf("%d%d",&n,&p);
printf("1\n");
for (int i=2;i<=n;i++)
printf("%d\n",inv[i]=(ll)p-(p/i)*inv[p%i]%p);
return 0;
}

题解 P3811 【【模板】乘法逆元】的更多相关文章

  1. 【洛谷P3811】[模板]乘法逆元

    乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...

  2. 【ZOJ 3609】Modular Inverse 最小乘法逆元

    The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x  ...

  3. P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 线性递推逆元模板 #include<iostream> #include<cstdio> #include<cstring> #def ...

  4. [洛谷P3811]【模板】乘法逆元

    P3811 [模板]乘法逆元 题意 求1-n所有整数在模p意义下的逆元. 分析 逆元 如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元 ...

  5. 模板【洛谷P3811】 【模板】乘法逆元

    P3811 [模板]乘法逆元 给定n,p求1~n中所有整数在模p意义下的乘法逆元. T两个点的费马小定理求法: code: #include <iostream> #include < ...

  6. 洛谷 P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下 ...

  7. 洛谷——P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 线性求逆元 逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也 ...

  8. 逆元-P3811 【模板】乘法逆元-洛谷luogu

    https://www.cnblogs.com/zjp-shadow/p/7773566.html -------------------------------------------------- ...

  9. luogu P3811 【模板】乘法逆元

    题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...

随机推荐

  1. windows和linux双系统,重新分区后修复grub

    我电脑里装的是 windows 7 profressional 和 fedora 12 ,本来给 C 盘分了 50G ,原本以为够了,结果50G 瞬间用完,于是乎开始重新分区. PQ 是不能用了,上网 ...

  2. HTTP通信过程原理

    HTTP协议 通信过程介绍 HTTP协议介绍 Http(Hypertext Transfer Protocol)超文本传输协议. Http是应用层协议,当你上网浏览网页的时候,浏览器和服务器之间就会通 ...

  3. 完全卸载mysql免安装版

    使用以下命令 reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\MySQL& ...

  4. Vista之前的版本,默认本地登陆用户都以管理员权限启动程序

    Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...

  5. better later than never

    工作一年半,写程序也有几年了,终于开了个博客,记录一下遇到的问题和解决方法,和其他需要记录的东西.希望自己不会懒……已经开通两周了才开始写,唉……

  6. SpringBoot自定义注解@YamlPropertySource加载yml或者yaml文件(扩展了@PropertySource)

    1:概述 SpringBoot的@PropertySource注解只支持加载 properties结尾的文件.当使用@ConfigurationProperties 注解配合@EnableConfig ...

  7. Python字典的合并与拆分

    1.字典的合并 dict1={1:[1,11,111],2:[2,22,222]} dict2={3:[3,33,333],4:[4,44,444]} dictMerged2=dict(dict1, ...

  8. 简单学习js

    由于是个前端小白,通过这一两天的学习html,css,js和jquery等,基本上前端会用了,而且熟悉我博客的人来说,没错,我把自己的博客给优化了一下(一些大佬都是禁用模板的所有样式,然后自己设计页面 ...

  9. win2008环境mysql主从配置

    一.主库相关配置.设置 step1:主库配置文件 [mysqld] # 数据库id,唯一 server-id = 1# 二进制日志文件,必填项,否则不能同步数据;如果不取名字的话,会以计算机的名字加编 ...

  10. Django之F、Q查询,事务,自定义char字段

    F查询 from django.db.models import F,Q # 当查询条件来自于数据库的某个字段,这个时候就必须使用F # 查询卖出数大于库存数的商品 res = models.Prod ...