[洛谷P3811]【模板】乘法逆元
P3811 【模板】乘法逆元
题意
求1-n所有整数在模p意义下的逆元。
分析
逆元
如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元
A 拓展欧几里得算法
\]
转换一下也就是
\]
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int extgcd(int a,int b,int&x,int&y){
if(b==0){
x=1;
y=0;
return a;
}
int g=extgcd(b,a%b,y,x);
y-=a/b*x;
return g;
}
int main(){
int a,b,x,y;
cin>>a>>b;
for(int i=1;i<=a;i++){
extgcd(i,b,x,y);
cout<<(x%b+b)%b<<endl;
}
}
得分:48。TLE
B 费马小定理
当p是质数时:
\]
将其变形一下即得
\]
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b%2){
ans*=a;
ans%=p;
}
a*=a;
a%=p;
b>>=1;
}
return ans%p;
}
int main(){
int n,p;
cin>>n>>p;
for(int i=1;i<=n;i++){
cout<<(qpow(i,p-2,p)%p+p)%p<<endl;
}
}
得分:48。TLE
B' 欧拉定理
费马小定理只是欧拉定理的特殊情况。欧拉定理:
\]
也就是说\(a^{\phi(p)-1}\)是\(a\)在\(\%p\)意义下的逆元。
其中\(\phi\)是欧拉函数:小于n的正整数中与n互质的数的数目。
通式:\(\phi(n)=n\Pi_{i=1}^{n}\left(1-\frac{1}{p_i}\right)\)
递推性质:
- \(\phi(p)=p-1\) (p是质数)
- \(\phi(ab)=\phi(b)\phi(b)\) (a,b互质)
- \(\phi(ip)=p\phi(i)\) (i是p的倍数)
所以可以用类似线性筛的方法求出欧拉函数表。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b%2){
ans*=a;
ans%=p;
}
a*=a;
a%=p;
b>>=1;
}
return ans%p;
}
ll n,p;
ll phi[20000529],prime[2000052],ps;
bool mark[2000052];
void calc(){
phi[1]=1;
for(int i=2;i<=p;i++){
if(!mark[i]){
prime[++ps]=i;
phi[i]=i-1;
}
for(int j=1;j<=ps;j++){
if(i*prime[j]>p)break;
mark[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else{
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
}
int main(){
cin>>n>>p;
calc();
for(int i=1;i<=n;i++){
cout<<(qpow(i,phi[p]-1,p)%p+p)%p<<endl;
}
}
得分:32。TLE
C 神奇的递推式(正解)
设
\]
然后放到\(\%p\)意义下
\]
两边同时乘以\(a^{-1}r^{-1}\)
\]
所以
\]
转换成代码就是
inv[a]=-(p/a)*inv[p%a];
正解代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,p;
int inv[3000000];
int main(){
scanf("%d%d",&n,&p);
inv[1]=1;
printf("1\n");
for(int i=2;i<=n;i++){
inv[i]=((-((ll)p/i)*inv[p%i])%p+p)%p;
printf("%d\n",inv[i]);
}
}
[洛谷P3811]【模板】乘法逆元的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 模板【洛谷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 【模板】乘法逆元
https://www.luogu.org/problem/show?pid=3811 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式 ...
- 【洛谷P3811】[模板]乘法逆元
乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...
- 乘法逆元-洛谷-P3811
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- 洛谷.3803.[模板]多项式乘法(FFT)
题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...
- 洛谷.3803.[模板]多项式乘法(NTT)
题目链接:洛谷.LOJ. 为什么和那些差那么多啊.. 在这里记一下原根 Definition 阶 若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\ ...
随机推荐
- PAT 1093 Count PAT's[比较]
1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...
- django xadmin的全局配置
在adminx.py中增加 class BaseSetting(object): enable_themes = True use_bootswatch = True class GlobalSett ...
- LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定?
本文参考自:https://www.zhihu.com/question/21692336/answer/19387415 方法一: alpha 是 选择为 50/ k, 其中k是你选择的topi ...
- XDU 1098 (欧拉函数模板题)
原题链接,点击此处 欧拉函数:φ(N)表示对一个正整数N,欧拉函数是小于N且与N互质的数的个数 通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/p ...
- ruby中的可调用对象--方法
上一篇讲了ruby中的可调用对象proc和lambda,他们都是块转换成的对象.ruby中的可调用对象还有方法.通过使用method方法,并且以方法名作为参数(字符串或者符号),就可以得到一个方法对象 ...
- The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567
地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...
- linux在文件中包含某个关键词的指定行插入内容
1. 在包含某个关键字的行上面插入一行文字 sed -i '/wangzai/i\doubi' 1.txt 把内容doubi插入到包含wangzai关键字的上一行 2. 在包含某个关键字的行下面插入一 ...
- netbeans通过wsdl生成webservice的UTF8问题
在netbeans通过wsdl方式生成的webservice,打开类文件时,提示无法通过UTF-8打开. 这是因为默认生成的文件不是UTF-8格式的,解决方案如下: 1.打开netbeans的安装目录 ...
- 查看ubuntu 各系统的内核版本
1.查看ubuntu版本号: cat /etc/issue 返回结果: Ubuntu 16.04.2 LTS \n \l 2.查看内核版本号: cat /proc/version 返回结 ...
- Python面试题之解读Socketserver & Tcpserver
在解析socketserver是如工作之前,我们先看看socektserver类的继承关系图: 请求类继承关系: server类继承关系: 有了上面的继承关系图后,我们解析socketserver就轻 ...