A Number Theoretical Problem

题目连接: A Number Theoretical Problem

大致题意:

给出一个整数x 和 质数p, 让你找到一个整数y满足 (x * y) % p == 1.
如果找到则输出y % p的结果, 否则输出 -1;

解题思路:

与费马小定理和除法逆元有关

由除法逆元可知: (a / b) == a * bp-2 % p == 1
此时应该有: a * bp-2 == x * y; 而 b == a % p

所以得出y == xp-2 % p; 而我们只需要判断是否满足逆元条件即可.

AC代码:

#include 
typedef long long ll;
using namespace std;
ll mypow(ll a, ll b, ll mod) {
	ll res = 1;
	while (b) {
		if (b & 1) res = res * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return res;
}
int main(void)
{
	ll t; cin >> t;
	ll x, p;
	while (t--) {
		cin >> x >> p;
		if (x % p == 0) { printf("-1\n"); continue; }
		printf("%lld\n", mypow(x, p - 2, p));
	}
	return 0;
}

END

你可能感兴趣的:(数论,思维题目)