#include <bits/stdc++.h>
using namespace std;
// n log(n)
// sqrt(n)
int totientFunc(int n) {
int ans = 0;
for (int i=1; i<=n; i++) {
if (__gcd(n, i) == 1) ans++;
}
return ans;
}
const int N = 10000000;
vector<int> lp(N+1);
vector<int> pr;
// linear sieve
void init() {
for (int i=2; i <= N; ++i) {
if (lp[i] == 0) {
lp[i] = i;
pr.push_back(i);
}
for (int j = 0; i * pr[j] <= N; ++j) {
lp[i * pr[j]] = pr[j];
if (pr[j] == lp[i]) {
break;
}
}
}
}
// Complexity = O(log(n))
int impTF(int n) {
int phi = n;
while(n > 1){
int p = lp[n]; // p = lp[5] = 5
phi -= phi / p; // phi = 40 - 40 / 5 = 32
int power = 0;
while (n % p == 0) n /= p, power++; // Can run at most log(n)
}
return phi;
}
// Find the TF for all numbers between 1 to n
// O (n * log(n))
// Optimized way = O(n * log (log (n)))
int divCount(int n) {
int ans = 1;
while(n > 1){
int p = lp[n];
int power = 0;
while (n % p == 0) n /= p, power++; // Can run at most log(n)
ans = ans * (power + 1);
}
return ans;
}
void phi_1_to_n(int n) {
vector<int> phi(n + 1);
for (int i = 0; i <= n; i++)
phi[i] = i;
for (int i = 2; i <= n; i++) {
if (phi[i] == i) { // i = 2, phi[2] = 2
for (int j = i; j <= n; j += i) // j = 2; j<=n; j+=2
phi[j] -= phi[j] / i;
}
}
}
int main( ) {
init();
cout << totientFunc(120000) << endl;
cout << impTF(120000) << endl;
}
/*
Find all prime factors of 120 = 2 ^ 3 * 3 * 5
Result = [2] + [3, 5] = [2, 3, 5]
lp[120] = 2
120 / 2 = 60
60 / 2 = 30
30 / 2 = 15
lp[15] = 3
15 / 3 = 5
lp[5] = 5
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
for (int i=0; i<n; i++) {
int x;
cin >> x;
int ans = 0;
for (int j=1; j*j <= x; j++) {
if (x % j == 0) {
ans++;
if (j != (x / j)) ans++;
}
}
cout << ans << endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKLy8gbiBsb2cobikKLy8gc3FydChuKQppbnQgdG90aWVudEZ1bmMoaW50IG4pIHsKICAgIGludCBhbnMgPSAwOwogICAgZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIHsKICAgICAgICBpZiAoX19nY2QobiwgaSkgPT0gMSkgYW5zKys7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9Cgpjb25zdCBpbnQgTiA9IDEwMDAwMDAwOwp2ZWN0b3I8aW50PiBscChOKzEpOwp2ZWN0b3I8aW50PiBwcjsKCi8vIGxpbmVhciBzaWV2ZSAKdm9pZCBpbml0KCkgewogICAgZm9yIChpbnQgaT0yOyBpIDw9IE47ICsraSkgewogICAgICAgIGlmIChscFtpXSA9PSAwKSB7CiAgICAgICAgICAgIGxwW2ldID0gaTsKICAgICAgICAgICAgcHIucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBqID0gMDsgaSAqIHByW2pdIDw9IE47ICsraikgewogICAgICAgICAgICBscFtpICogcHJbal1dID0gcHJbal07CiAgICAgICAgICAgIGlmIChwcltqXSA9PSBscFtpXSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cgp9CgovLyBDb21wbGV4aXR5ID0gTyhsb2cobikpCmludCBpbXBURihpbnQgbikgewogICAgaW50IHBoaSA9IG47CiAgICB3aGlsZShuID4gMSl7CiAgICAgICAgaW50IHAgPSBscFtuXTsgLy8gcCA9IGxwWzVdID0gNQogICAgICAgIHBoaSAtPSBwaGkgLyBwOyAvLyBwaGkgPSA0MCAtIDQwIC8gNSA9IDMyCiAgICAgICAgaW50IHBvd2VyID0gMDsKICAgICAgICB3aGlsZSAobiAlIHAgPT0gMCkgbiAvPSBwLCBwb3dlcisrOyAvLyBDYW4gcnVuIGF0IG1vc3QgbG9nKG4pCiAgICB9CgogICAgcmV0dXJuIHBoaTsKfQovLyBGaW5kIHRoZSBURiBmb3IgYWxsIG51bWJlcnMgYmV0d2VlbiAxIHRvIG4KLy8gTyAobiAqIGxvZyhuKSkKLy8gT3B0aW1pemVkIHdheSA9IE8obiAqIGxvZyAobG9nIChuKSkpCgppbnQgZGl2Q291bnQoaW50IG4pIHsKICAgIGludCBhbnMgPSAxOwogICAgd2hpbGUobiA+IDEpewogICAgICAgIGludCBwID0gbHBbbl07CiAgICAgICAgaW50IHBvd2VyID0gMDsKICAgICAgICB3aGlsZSAobiAlIHAgPT0gMCkgbiAvPSBwLCBwb3dlcisrOyAvLyBDYW4gcnVuIGF0IG1vc3QgbG9nKG4pCiAgICAgICAgYW5zID0gYW5zICogKHBvd2VyICsgMSk7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIHBoaV8xX3RvX24oaW50IG4pIHsKICAgIHZlY3RvcjxpbnQ+IHBoaShuICsgMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspCiAgICAgICAgcGhpW2ldID0gaTsKCiAgICBmb3IgKGludCBpID0gMjsgaSA8PSBuOyBpKyspIHsKICAgICAgICBpZiAocGhpW2ldID09IGkpIHsgLy8gaSA9IDIsIHBoaVsyXSA9IDIKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGk7IGogPD0gbjsgaiArPSBpKSAvLyBqID0gMjsgajw9bjsgais9MgogICAgICAgICAgICAgICAgcGhpW2pdIC09IHBoaVtqXSAvIGk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbiggKSB7CiAgICBpbml0KCk7CiAgICBjb3V0IDw8IHRvdGllbnRGdW5jKDEyMDAwMCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgaW1wVEYoMTIwMDAwKSA8PCBlbmRsOwoKfQoKLyoKICAgIEZpbmQgYWxsIHByaW1lIGZhY3RvcnMgb2YgMTIwID0gMiBeIDMgKiAzICogNQogICAgUmVzdWx0ID0gWzJdICsgWzMsIDVdID0gWzIsIDMsIDVdCiAgICBscFsxMjBdID0gMgogICAgMTIwIC8gMiA9IDYwCiAgICA2MCAvIDIgPSAzMAogICAgMzAgLyAyID0gMTUKICAgIGxwWzE1XSA9IDMKICAgIDE1IC8gMyA9IDUKICAgIGxwWzVdID0gNQoqLwoKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwoKICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspIHsKICAgICAgICBpbnQgeDsKICAgICAgICBjaW4gPj4geDsKICAgICAgICBpbnQgYW5zID0gMDsKICAgICAgICBmb3IgKGludCBqPTE7IGoqaiA8PSB4OyBqKyspIHsKICAgICAgICAgICAgaWYgKHggJSBqID09IDApIHsKICAgICAgICAgICAgICAgIGFucysrOyAKICAgICAgICAgICAgICAgIGlmIChqICE9ICh4IC8gaikpIGFucysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7CiAgICB9Cn0=