Untitled

 avatar
unknown
c_cpp
a year ago
1.9 kB
4
Indexable
#include <bits/stdc++.h>

using namespace std;

#define ll long long

void FIO() {
#ifndef ONLINE_JUDGE
    freopen("../in.txt", "r", stdin);
    freopen("../out.txt", "w", stdout);
#endif
}

const int N = 1e6 + 50;
bool isPrime[N];
vector<int> primes;

const int M = 1e9 + 7;

int add(int a, int b) {
    return (a + b) % M;
}

int mul(int a, int b) {
    return (1LL * a * b) % M;
}

int power(int x, ll p) {
    int res = 1;
    while (p) {
        if (p & 1) {
            res = mul(res, x);
        }
        x = mul(x, x);
        p >>= 1;
    }
    return res;
}

int fact[N], invFact[N];

bool composite[N];
vector<int> prime;


void pre() {
    fact[0] = 1;
    for (int i = 1; i < N; ++i) {
        fact[i] = (1LL * fact[i - 1] * i) % M;
    }

    invFact[N - 1] = power(fact[N - 1], M - 2);
    for (int i = N - 2; i >= 0; --i) {
        invFact[i] = (1LL * invFact[i + 1] * (i + 1)) % M;
    }

    memset(isPrime, true, sizeof(isPrime));
    isPrime[0] = isPrime[1] = false;
    composite[0] = composite[1] = true;
    for (int i = 2; i < N; ++i) {
        if (!composite[i])
            prime.push_back(i);
        for (int j = 0; j < prime.size() && i * prime[j] < N; ++j) {
            composite[i * prime[j]] = true;
            if (i % prime[j] == 0)
                break;
        }
    }

}

int nCr(int n, int r) {
    if (r > n) {
        return 0;
    }
    int res = fact[n];
    res = mul(res, invFact[r]);
    res = mul(res, invFact[n - r]);
    return res;
}

void solve() {
    int n;
    cin >> n;
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        if (!composite[i]) {
            ans = add(ans, nCr(n, i));
        }
    }
    cout << ans << "\n";
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    FIO();
    pre();

    int t = 1;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
Editor is loading...
Leave a Comment