题解 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 【【模板】乘法逆元】的更多相关文章
- 【洛谷P3811】[模板]乘法逆元
乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...
- 【ZOJ 3609】Modular Inverse 最小乘法逆元
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x ...
- P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 线性递推逆元模板 #include<iostream> #include<cstdio> #include<cstring> #def ...
- [洛谷P3811]【模板】乘法逆元
P3811 [模板]乘法逆元 题意 求1-n所有整数在模p意义下的逆元. 分析 逆元 如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元 ...
- 模板【洛谷P3811】 【模板】乘法逆元
P3811 [模板]乘法逆元 给定n,p求1~n中所有整数在模p意义下的乘法逆元. T两个点的费马小定理求法: code: #include <iostream> #include < ...
- 洛谷 P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下 ...
- 洛谷——P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 线性求逆元 逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也 ...
- 逆元-P3811 【模板】乘法逆元-洛谷luogu
https://www.cnblogs.com/zjp-shadow/p/7773566.html -------------------------------------------------- ...
- luogu P3811 【模板】乘法逆元
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
随机推荐
- 【备忘】C#语言基础-2
泛型 CollectionClass<ItemClass> items = new CollectionClass<ItemClass>(); items.Add(new It ...
- Hadoop中重要概念简要总结
Hadoop是一个利用大规模计算机集群,可处理大量数据的分布式并行框架. Hadoop 官网 Hadoop的核心设计包括HDFS和MapReduce. HDFS HDFS(Hadoop Distrib ...
- delphi 获取当前进程的cpu占用率
type TProcessCpuUsage = record private FLastUsed, FLastTime: Int64; FCpuCount:Integer; publ ...
- 智能合约开发——以太坊 DApp 实现 购买通证token
合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...
- LockWindowUpdate
//锁住listview防止反复刷新 LockWindowUpdate(Self.lvsearch.Handle); 貌似不太行,多用几下就卡住了 那个函数几乎不用 ...
- Qt多线程学习-用例子来理解多线程
文章出处:DIY部落(http://www.diybl.com/course/3_program/c/c_js/20090303/157373_3.html) POINT 1:QThread类的实例与 ...
- ssh超时时间设置(设置ClientAliveInterval),附SSH超详细参数
作者: daodaoliang 版本: V 0.0.1 日期: 2016年12月29日 0x00 OpenSSH 简介 OpenSSH是采用SSH协议实现的重要的远程连接工具,它对所有的数据进行加密以 ...
- Qt学习虚拟机--基于MSYS2-MinGW环境并带有各种开源的软件库!
Qt学习虚拟机--基于MSYS2-MinGW环境并带有各种开源的软件库!虚拟机地址,VM10和以上:http://pan.baidu.com/s/1slcTA49包含两个分卷压缩包,加起来5GB多. ...
- java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence 解决方法
编译遇到错误,如下: May 11, 2017 1:49:42 PM org.springframework.web.context.ContextLoader initWebApplicationC ...
- ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理
我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...