A Number Theoretical Problem (逆元)

题目链接:https://ac.nowcoder.com/acm/contest/5891/B

题意:给定y和p,问(x*y)%p=1是否有解,若有解则输出x。

tip:费马小定理->若a和p互质且p为质数,则(a^(p-1))%p=1%p。逆元->a*b=1(mod p),其中a和b与p互质。

solution:可以将式子化成x%p*y%p=1%p  =>  x%p=y的逆元%p  =>x%p=y^(p-2)%p。因此只需要算出y^(p-2)%p即可,可以用快速幂求解。

代码:

#include
using namespace std;
typedef long long ll;
ll fpow(ll a,ll b,ll mod){
	ll ans=1;
	while(b){
		if(b&1) ans=(ans*a)%mod;
		b/=2;a=(a*a)%mod;
	}
	return ans%mod;
}

int main()
{
	int t;
	cin>>t;
	while(t--){
		ll y,p;
		cin>>y>>p;
		if(__gcd(y,p)!=1) cout<<-1<

 

你可能感兴趣的:(数论)