Untitled
unknown
c_cpp
9 months ago
2.4 kB
22
Indexable
#include <bits/stdc++.h>
using namespace std;
#define ll long long
template<int mod>
struct Mint {
int x;
Mint() : x(0) {}
Mint(ll x_) : x(x_ % mod) { if (x < 0) x += mod; }
Mint& operator += (Mint b) { if ((x += b.x) >= mod) x -= mod; return *this;}
Mint& operator -= (Mint b) { if ((x -= b.x) < 0) x += mod; return *this;}
Mint& operator *= (Mint b) { x = (ll)(x) * b.x % mod; return *this;}
Mint pow(ll e) const {
Mint r = 1;
for (Mint b = *this; e; b *= b, e >>= 1)
if (e & 1) r *= b;
return r;
}
Mint inv() { return pow(mod - 2); }
Mint& operator /= (Mint b) { return *this *= b.inv(); }
friend Mint operator + (Mint a, Mint b) { return a += b; }
friend Mint operator - (Mint a, Mint b) { return a -= b; }
friend Mint operator / (Mint a, Mint b) { return a /= b; }
friend Mint operator * (Mint a, Mint b) { return a *= b; }
friend bool operator == (Mint a, Mint b) { return a.x == b.x; }
friend bool operator != (Mint a, Mint b) { return a.x != b.x; }
};
typedef Mint<1000000007> mint;
const int mod = 1000000007;
vector<ll> fact_divs(ll x) {
vector<ll> divs;
for (ll i = 1; i <= x / i; i++) if (x % i == 0) {
divs.push_back(i);
if ((x / i) != i) divs.push_back(x / i);
}
return divs;
}
vector<ll> fact_primes(ll x) {
vector<ll> primes;
for (ll i = 2; i <= x / i; i++) if (x % i == 0) {
primes.push_back(i);
while (x % i == 0) x /= i;
}
if (x > 1) primes.push_back(x);
return primes;
}
mint choose(ll n, int r) { // n is huge, r is small
// n!/(n - r)!
mint ans(1);
for (ll i = n - r + 1; i <= n; i++) ans *= mint(i);
for (int i = 1; i <= r; i++) ans /= mint(i);
return ans;
}
void solve() {
ll n, a, b;
cin >> n >> a >> b;
auto divs = fact_divs(b);
auto primes = fact_primes(b);
mint ans(0);
for (ll d : divs) if (d <= a) {
ll o = b / d;
ll x = d;
mint res(1);
for (ll p : primes) {
int c = 0;
while (x % p == 0) {
x /= p;
c += 1;
}
res *= choose(n - 1 + c, c);
c = 0;
while (o % p == 0) {
o /= p;
c += 1;
}
res *= choose(n - 1 + c, c);
}
ans += res;
}
cout << ans.x << "\n";
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int tt = 1, tc = 1;
cin >> tt;
while (tt--) {
cout << "Case #" << tc++ << ": ";
solve();
}
}Editor is loading...
Leave a Comment