#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int power(int x, int k) {
	int ans = 1;
	while(k) {
		if(k & 1) ans = (ans * x) % mod;
		k >>= 1; x = (x * x) % mod;
	}
	return ans % mod;
}
int C(int n, int m) {
	int a = 1, b = 1;
	for(int i = n - m + 1; i <= n; ++i) a = (a * i) % mod;
	for(int i = 2; i <= m; ++i) b = (b * i) % mod;
	return (a * power(b, mod - 2)) % mod; 
}
int lucas(int n, int m) {
	if(m == 0) return 1;
	if(n < mod && m < mod) return C(n, m);
	return (lucas(n % mod, m % mod) * lucas(n / mod, m / mod)) % mod;
}
int main() {
	
	int T; cin >> T;
	while(T--) {
		int n, m; cin >> n >> m;
		cout << luvas(n, m) << "\n";
	}
	return 0;
}
原文:https://www.cnblogs.com/hzy1/p/14614780.html