费马小定理: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p) 两边都mod p;
即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
延伸:
1. n*a^(p-1) ≡ n (mod p)
2. a^(p-2) ≡ a^(-1) (mod p)
3.a^b≡a^(bmod(p−1)) (modp)
正序逆序要灵活运用!
例题:
C~K的难题:费马小定理+快速幂
Problem Description
众所周知 C~K 喜欢数学,但是他最近被一个题给难住了,题目是这样的。
要求 (A/B)%10007,但由于 A 很大,我们只给出 n (n = A%10007)(我们给定的A必能被B整除,且 gcd(B,10007) = 1)。
你能帮助他解答吗?他会很感谢你的。
Input
数据的第一行是一个 T,表示有 T 组数据。
每组数据有两个数 n (0 <= n < 10007) 和 B (1 <= B <= 10^9)。
Output
对应每组数据输出 (A/B)%10007。
Sample Input
2 1000 53 87 123456789
Sample Output
8893 7424
/* (A/B)%mod => A%mod/B => n/B => n*B^(-1) => 延伸2 => n*(B^(mod-2))%mod */ #include<iostream> #include<algorithm> using namespace std; #define ll long long int qmi(ll a, ll b, ll mod) { //快速幂 ll flag = 1; while (b) { if (b & 1)flag = (flag*a) % mod; a = (a*a) % mod; b = b >> 1; } return flag%mod; } int main() { int t, n, b,mod=10007; cin >> t; while (t--) { cin >> n >> b; cout << n*qmi(b, mod-2, mod) % mod << " "; } return 0; }