本文共 1177 字,大约阅读时间需要 3 分钟。
题目链接:
时/空限制:1s / 64MB给定n组询问,每组询问给定三个整数a,b,p,其中p是质数,请你输出的值。
第一行包含整数n。
接下来n行,每行包含一组a,b,p。
共n行,每行输出一个询问的解。
1≤n≤20,
1≤b≤a≤10^18, 1≤p≤10^5,
3
5 3 7 3 1 5 6 4 13
3
3 2
题意:求的值。
思路:Accepted Code:
/* * @Author: lzyws739307453 * @Language: C++ */#includeusing namespace std;typedef long long ll;int Fast_Power(int a, int b, int p) { int res = 1; while (b) { if (b & 1) res = 1ll * res * a % p; a = 1ll * a * a % p; b >>= 1; } return res;}int Com_Num(int a, int b, int p) { int res = 1; for (int i = 1, j = a; i <= b; i++, j--) res = 1ll * res * j % p * Fast_Power(i, p - 2, p) % p; return res;}int lucas(ll a, ll b, int p) { if (a < p && b < p) return Com_Num(a, b, p); return 1ll * Com_Num(a % p, b % p, p) * lucas(a / p, b / p, p) % p;}int main() { int t; scanf("%d", &t); while (t--) { int p; ll a, b; scanf("%lld%lld%d", &a, &b, &p); printf("%d\n", lucas(a, b, p)); } return 0;}
转载地址:http://rubtf.baihongyu.com/