/*#include<bits/stdc++.h>
using namespace std;
int isprime(int j)
{
int k;
int count2=0;
for(k=2;k<=sqrt(j);k++)
{
if(j%k==0)
return 1;
break;
}
if(count2==0)
return 0;
}
int main()
{
int i,j,t,n;
cin>>t;
for(i=0;i<t;i++)
{
int count=0;
cin>>n;
if(n<4)
{
cout<<0<<endl;
}
else
{
for(j=4;j<=sqrt(n);j++)
{
if(n%j==0 && isprime(j)==1)
count++;
}
cout<<count<<endl;
}
}
}*/
/*
// Sample code to perform I/O:
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // Reading input from STDIN
cout << "Input number is " << num << endl; // Writing output to STDOUT
}
// Warning: Printing unwanted or ill-formatted data to output will cause the test cases to fail
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int N = 1000000;
int prime[1000001] = {0}; // prime sieve...
int v[1000001]; // array to store all the prime values...
prime[2] = 1;
for(ll i = 3; i <= N; i = i+2)
prime[i] = 1;
v[0] = 2;
ll int k = 1;
for(ll int i = 3; i <= N; i += 2)
{
if(prime[i])
{
v[k] = i;
k++;
for(ll int j = i*i; j <= N; j += 2 * i)
prime[j] = 0;
}
}
int t;
cin >> t;
while(t--)
{
ll int n;
cin >> n;
ll int i = 0;
ll int p1 = v[0];
ll int ans = 1 , d = 0;
while(p1 * p1 <= n && i < k)
{
ll int c = 0;
while(n % p1 == 0)
{
n = n/p1;
c++;
}
if(c > 0)
d++;
ans*=(c+1);
i++;
p1 = v[i];
}
if(n != 1)
{
ans*=2;
ans-=1;
}
cout << ans-d << endl;
}
return 0;
}
Language: C++