当前位置:网站首页>Mathematical knowledge: fast power inverse element - fast power
Mathematical knowledge: fast power inverse element - fast power
2022-06-23 07:45:00 【Fight! Sao Nian!】
subject :AcWing 876. Fast power inverse
Given n Group ai,pi, among pi Prime number , seek ai model pi Multiplicative inverse element of , If the inverse element does not exist, output impossible.
Be careful : Please return to 0∼p−1 The inverse element between .
Definition of multiplicative inverse
If integer b,m Coprime , And for any integer a, If meet b|a, Then there is an integer x, bring a/b≡a*x(mod m), said x by b The mold m Multiplicative inverse element , Write it down as b−1(modm).
b The necessary and sufficient condition for the existence of multiplicative inverse is b And modulus m Coprime . When modulus m Prime number ,bm−2 That is to say b Multiplicative inverse element of .
Input format
The first line contains integers n.
Next n That's ok , Each row contains an array ai,pi, Data assurance pi Prime number .
Output format
The output, n That's ok , Each group of data outputs a result , Each result takes up one line .
if ai model pi The multiplicative inverse of exists , Then an integer is output , Represents the inverse element , Otherwise output impossible.
Data range
1≤n≤105,
1≤ai,pi≤2∗109
sample input :
3
4 3
8 5
6 3
sample output :
1
2
impossible
Topic analysis :
When n Prime number , You can use the fast power to find the inverse element :
a / b ≡ a * x (mod n)
Ride on both sides b Available a ≡ a * b * x (mod n)
namely 1 ≡ b * x (mod n)
Same as b * x ≡ 1 (mod n)
From Fermat's theorem , When n Prime number
b ^ (n - 1) ≡ 1 (mod n)
Remove one b Come out and get b * b ^ (n - 2) ≡ 1 (mod n)
Therefore, when n Prime number ,b Multiplicative inverse element of x = b ^ (n - 2)
#include <iostream>
using namespace std;
const int N = 100010;
typedef long long LL;
LL qmi(int a,int k,int p)
{
LL res=1%p;
while(k)
{
if(k&1)res=(LL)res*a%p;
a=(LL)a*a%p;
k>>=1;
}
return res;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a,p;
scanf("%d%d",&a,&p);
int res=qmi(a,p-2,p);
if(a%p)cout<<res<<endl;
else cout<<"impossible"<<endl;
}
return 0;
}
边栏推荐
猜你喜欢

在kubernetes中部署kubersphere

The road to hcip MPLS

Yolov5 detecting small targets (with source code)

Vs problems when connecting to SQL myconn OPen(); cannot execute

Cirium has gradually become the standard for airlines' carbon dioxide emission reporting

Eureka service registration and discovery

传智教育 | 项目发布前如何打tag标签及标签命名规范

GIF验证码分析

Product axure9 (English version), prototype design background dynamic secondary menu display content

《一周的朋友》
随机推荐
[* * * array * * *]
Minio single node deployment Minio distributed deployment fool deployment process (I)
CIRIUM(睿思誉)逐渐成为航空公司二氧化碳排放报告的标准
【Kubernetes】Kubernetes各大版本的最新版本下载地址
【唠嗑篇】普通人到底该怎么学技术啊?
[2022 graduation season] from graduation to transition to the workplace
JS to determine the added and decreased elements of two arrays
左乘右乘矩阵问题
[Laoke] how should ordinary people learn technology?
js中的同步和异步
User mode and kernel mode
快速排序 + 冒泡排序 + 插入排序 + 选择排序
数学知识:欧拉函数—欧拉函数
MySQL (V) - locks and transactions
NFS 特别注意权限的问题
MySQL transaction isolation level
浅析 Open API 设计规范
20bn Jester complete dataset Download
To conquer salt fields and vegetable fields with AI, scientific and technological innovation should also step on the "field"
快速排序 + 冒泡排序 + 插入排序 + 選擇排序