/**
Problem: ACM-ICPC Live Archive 7563 - Coprimes
Category: Number Theory, Inclusion-Exclusion
**/
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define LL long long
#define NL '\n'
#define xx first
#define yy second
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(i,j,k) for(i=j;i<=k;i++)
#define REV(i,j,k) for(i=j;i>=k;i--)
#define READ(f) freopen(f,"r",stdin)
#define WRITE(f) freopen(f,"w",stdout)
#define pi 2.0*acos(0.0)
#define MOD 1000000007
#define MAX 10005
int v[6100][5*MAX];
int sz, bz, a[5*MAX], b[MAX], p[MAX];
LL mob[MAX]={0}, fact[5*MAX], inv[5*MAX];
void mobius_sieve(int n)
{
int status[MAX]={0};
mem(mob,0);
sz = 0;
for(LL i = 2; i <= n; i++)
{
if(status[i] == 0)
{
LL k = i*i;
for(LL j = i; j <= n; j+=i)
{
if((status[j] == 1 && mob[j]==0) || j%k == 0) mob[j] = 0;
else mob[j]++;
status[j] = 1;
}
}
if(mob[i] > 0 && mob[i]%2 == 1)
{
mob[i] = -1;
p[sz++] = i; // save only necessary elements
}
else if(mob[i] > 0 && mob[i]%2 == 0)
{
mob[i] = 1;
p[sz++] = i;
}
}
}
// For fermat's theorem below
LL bigmod(LL n, LL p, LL m)
{
if(p == 0) return 1;
if(p == 1 || n == 1) return n % m;
LL ret = bigmod(n, p/2, m);
ret = (ret * ret) % m;
if(p % 2) ret = (ret * n) % m;
return ret%m;
}
// Farmat's rule requires b to be prime
LL mod_inverse(LL a, LL b)
{
return bigmod(a, b-2, b);
}
void init()
{
// mobius function
// generate factorials
// generate modular inverse of factorials
mobius_sieve(10000);
fact[0] = 1;
inv[0] = mod_inverse(fact[0], MOD);
for(LL i = 1; i < 50002; i++)
{
// factorials
fact[i] = (fact[i-1] * i) % MOD;
// modular inverse of factorials
inv[i] = mod_inverse(fact[i], MOD);
}
}
int main()
{
//READ("in.txt");
//WRITE("out.txt");
int cases, caseno=0, n, i, j, k, q, l, r, cnt;
LL x, ans;
init();
while(scanf("%d", &n)==1)
{
FOR(i,0,n-1)
scanf("%d", &a[i]);
bz = 0;
// pre-process the array, O(sz * n) where sz = 6082
FOR(i,0,sz-1)
{
v[i][0] = 0;
if(a[0] % p[i] == 0) v[i][0]++;
FOR(j,1,n-1)
{
v[i][j] = v[i][j-1];
if(a[j] % p[i] == 0) v[i][j]++;
}
if(v[i][n-1] > 0) b[bz++] = i;
}
scanf("%d", &q);
while(q--)
{
scanf("%d %d %d", &l, &r, &k);
ans = (fact[r-l+1] * inv[k]) % MOD;
ans = (ans * inv[r-l+1-k]) % MOD;
FOR(i,0,bz-1)
{
cnt = v[ b[i] ][r-1];
if(l > 1) cnt -= v[ b[i] ][l-1];
if(cnt >= k)
{
// using nck = n! / (k! * (n-k)!)
x = (fact[cnt] * inv[k]) % MOD;
x = (x * inv[cnt-k]) % MOD;
x = mob[p[ b[i] ]] * x;
x = (x + MOD) % MOD;
ans = (ans + x) % MOD;
}
}
printf("%lld\n", ans);
}
}
return 0;
}
LyoqCiAgICBQcm9ibGVtOiBBQ00tSUNQQyBMaXZlIEFyY2hpdmUgNzU2MyAtIENvcHJpbWVzCiAgICBDYXRlZ29yeTogTnVtYmVyIFRoZW9yeSwgSW5jbHVzaW9uLUV4Y2x1c2lvbgoqKi8KCiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIExMIGxvbmcgbG9uZwojZGVmaW5lIE5MICdcbicKI2RlZmluZSB4eCBmaXJzdAojZGVmaW5lIHl5IHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgbWVtKGEsYikgbWVtc2V0KGEsYixzaXplb2YoYSkpCiNkZWZpbmUgRk9SKGksaixrKSBmb3IoaT1qO2k8PWs7aSsrKQojZGVmaW5lIFJFVihpLGosaykgZm9yKGk9ajtpPj1rO2ktLSkKI2RlZmluZSBSRUFEKGYpIGZyZW9wZW4oZiwiciIsc3RkaW4pCiNkZWZpbmUgV1JJVEUoZikgZnJlb3BlbihmLCJ3IixzdGRvdXQpCiNkZWZpbmUgcGkgMi4wKmFjb3MoMC4wKQojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYIDEwMDA1CgppbnQgdls2MTAwXVs1Kk1BWF07CmludCBzeiwgYnosIGFbNSpNQVhdLCBiW01BWF0sIHBbTUFYXTsKTEwgbW9iW01BWF09ezB9LCBmYWN0WzUqTUFYXSwgaW52WzUqTUFYXTsKCnZvaWQgbW9iaXVzX3NpZXZlKGludCBuKQp7CiAgICBpbnQgc3RhdHVzW01BWF09ezB9OwogICAgbWVtKG1vYiwwKTsKICAgIHN6ID0gMDsKCiAgICBmb3IoTEwgaSA9IDI7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGlmKHN0YXR1c1tpXSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgTEwgayA9IGkqaTsKCiAgICAgICAgICAgIGZvcihMTCBqID0gaTsgaiA8PSBuOyBqKz1pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZigoc3RhdHVzW2pdID09IDEgJiYgbW9iW2pdPT0wKSB8fCBqJWsgPT0gMCkgbW9iW2pdID0gMDsKICAgICAgICAgICAgICAgIGVsc2UgbW9iW2pdKys7CiAgICAgICAgICAgICAgICBzdGF0dXNbal0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZihtb2JbaV0gPiAwICYmIG1vYltpXSUyID09IDEpCiAgICAgICAgewogICAgICAgICAgICBtb2JbaV0gPSAtMTsKICAgICAgICAgICAgcFtzeisrXSA9IGk7IC8vIHNhdmUgb25seSBuZWNlc3NhcnkgZWxlbWVudHMKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihtb2JbaV0gPiAwICYmIG1vYltpXSUyID09IDApCiAgICAgICAgewogICAgICAgICAgICBtb2JbaV0gPSAxOwogICAgICAgICAgICBwW3N6KytdID0gaTsKICAgICAgICB9CiAgICB9Cn0KCi8vIEZvciBmZXJtYXQncyB0aGVvcmVtIGJlbG93CkxMIGJpZ21vZChMTCBuLCBMTCBwLCBMTCBtKQp7CiAgICBpZihwID09IDApIHJldHVybiAxOwogICAgaWYocCA9PSAxIHx8IG4gPT0gMSkgcmV0dXJuIG4gJSBtOwoKICAgIExMIHJldCA9IGJpZ21vZChuLCBwLzIsIG0pOwogICAgcmV0ID0gKHJldCAqIHJldCkgJSBtOwogICAgaWYocCAlIDIpIHJldCA9IChyZXQgKiBuKSAlIG07CiAgICByZXR1cm4gcmV0JW07Cn0KLy8gRmFybWF0J3MgcnVsZSByZXF1aXJlcyBiIHRvIGJlIHByaW1lCkxMIG1vZF9pbnZlcnNlKExMIGEsIExMIGIpCnsKICAgIHJldHVybiBiaWdtb2QoYSwgYi0yLCBiKTsKfQoKdm9pZCBpbml0KCkKewogICAgLy8gbW9iaXVzIGZ1bmN0aW9uCiAgICAvLyBnZW5lcmF0ZSBmYWN0b3JpYWxzCiAgICAvLyBnZW5lcmF0ZSBtb2R1bGFyIGludmVyc2Ugb2YgZmFjdG9yaWFscwogICAgbW9iaXVzX3NpZXZlKDEwMDAwKTsKCiAgICBmYWN0WzBdID0gMTsKICAgIGludlswXSA9IG1vZF9pbnZlcnNlKGZhY3RbMF0sIE1PRCk7CgogICAgZm9yKExMIGkgPSAxOyBpIDwgNTAwMDI7IGkrKykKICAgIHsKICAgICAgICAvLyBmYWN0b3JpYWxzCiAgICAgICAgZmFjdFtpXSA9IChmYWN0W2ktMV0gKiBpKSAlIE1PRDsKICAgICAgICAvLyBtb2R1bGFyIGludmVyc2Ugb2YgZmFjdG9yaWFscwogICAgICAgIGludltpXSA9IG1vZF9pbnZlcnNlKGZhY3RbaV0sIE1PRCk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgLy9SRUFEKCJpbi50eHQiKTsKICAgIC8vV1JJVEUoIm91dC50eHQiKTsKICAgIGludCBjYXNlcywgY2FzZW5vPTAsIG4sIGksIGosIGssIHEsIGwsIHIsIGNudDsKICAgIExMIHgsIGFuczsKCiAgICBpbml0KCk7CgogICAgd2hpbGUoc2NhbmYoIiVkIiwgJm4pPT0xKQogICAgewogICAgICAgIEZPUihpLDAsbi0xKQogICAgICAgICAgICBzY2FuZigiJWQiLCAmYVtpXSk7CgogICAgICAgIGJ6ID0gMDsKICAgICAgICAvLyBwcmUtcHJvY2VzcyB0aGUgYXJyYXksIE8oc3ogKiBuKSB3aGVyZSBzeiA9IDYwODIKICAgICAgICBGT1IoaSwwLHN6LTEpCiAgICAgICAgewogICAgICAgICAgICB2W2ldWzBdID0gMDsKICAgICAgICAgICAgaWYoYVswXSAlIHBbaV0gPT0gMCkgdltpXVswXSsrOwoKICAgICAgICAgICAgRk9SKGosMSxuLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZbaV1bal0gPSB2W2ldW2otMV07CiAgICAgICAgICAgICAgICBpZihhW2pdICUgcFtpXSA9PSAwKSB2W2ldW2pdKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHZbaV1bbi0xXSA+IDApIGJbYnorK10gPSBpOwogICAgICAgIH0KCiAgICAgICAgc2NhbmYoIiVkIiwgJnEpOwoKICAgICAgICB3aGlsZShxLS0pCiAgICAgICAgewogICAgICAgICAgICBzY2FuZigiJWQgJWQgJWQiLCAmbCwgJnIsICZrKTsKCiAgICAgICAgICAgIGFucyA9IChmYWN0W3ItbCsxXSAqIGludltrXSkgJSBNT0Q7CiAgICAgICAgICAgIGFucyA9IChhbnMgKiBpbnZbci1sKzEta10pICUgTU9EOwoKICAgICAgICAgICAgRk9SKGksMCxiei0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjbnQgPSB2WyBiW2ldIF1bci0xXTsKICAgICAgICAgICAgICAgIGlmKGwgPiAxKSBjbnQgLT0gdlsgYltpXSBdW2wtMV07CgogICAgICAgICAgICAgICAgaWYoY250ID49IGspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgbmNrID0gbiEgLyAoayEgKiAobi1rKSEpCiAgICAgICAgICAgICAgICAgICAgeCA9IChmYWN0W2NudF0gKiBpbnZba10pICUgTU9EOwogICAgICAgICAgICAgICAgICAgIHggPSAoeCAqIGludltjbnQta10pICUgTU9EOwogICAgICAgICAgICAgICAgICAgIHggPSBtb2JbcFsgYltpXSBdXSAqIHg7CiAgICAgICAgICAgICAgICAgICAgeCA9ICh4ICsgTU9EKSAlIE1PRDsKICAgICAgICAgICAgICAgICAgICBhbnMgPSAoYW5zICsgeCkgJSBNT0Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIiwgYW5zKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K