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. AspNetCore 小记

    1. Microsoft.AspNetCore.Hosting.IHostingEnvironment 的接口获取的值: WebRootPath:D:\参考资料\C#\AspNetCore开源项目\n ...

  2. 用友的BS专用浏览器方案

    T+的这个BS中的B是自己的专用浏览器,这样有以下好处 1.避免了公用浏览器比如IE 里的其它插件的干扰2.避免了各个操作系统不同版本和不同种类浏览器的兼容问题,且只需要维护一个版本3.避免了共用浏览 ...

  3. 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招

    朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...

  4. Qt之QSS(QTreeView)

    check 是选中 前面的指示器的状态 select 是选中 项目 item 的状态. http://blog.csdn.net/u011012932/article/details/52606662

  5. 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》

    记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...

  6. 完美解决iis下JWplayer提示Error loading media: File could not be played错误

    最近开发项目需要使用JWplayer插件播放视频,但是无论换那个版本.换什么样的视频总是提示Error loading media: File could not be played错误,废了好大的劲 ...

  7. MYSQL的全局变量和会话变量

    系统变量又分为全局变量与会话变量. 全局变量在MYSQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改. 会话变量在每次建立一个新的连接的时候,由MYSQ ...

  8. Quartz.Net实现作业定时调度详解

    1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度.它有很多特征,如:数据库支持,集群,插件,支持cron- ...

  9. Appcan 自定义数字加减控件

    DIV部分: *这里的三个ID:as_sub_3.as_now_3.as_add_3里面的“3”可以自定义,这个对于生成任意个数的列表形式很有帮助 *cb 为执行成功后可进行回调 <div cl ...

  10. mybatis以及预编译如何防止SQL注入

    SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedia SQL ...