Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- bool mark[10000007]= {false};
- ll isprime[10000007],psize=0;
- ll fact[10000007],sz=0;
- void sieve()
- {
- mark[0]=true;
- mark[1]=true;
- for(ll i=2; i*i<=10000000; i++)
- {
- if(mark[i]==false)
- {
- for(ll j=i*i; j<=10000000; j+=i)
- {
- mark[j]=true;
- }
- }
- }
- for(ll i=2; i<=10000000; i++)
- {
- if(mark[i]==false)
- isprime[psize++]=i;
- }
- }
- ll countfact(ll n)
- {
- ll cnt=0;
- for(ll i=0; i<psize && isprime[i]*isprime[i]<=n; i++)
- {
- if(n%isprime[i]==0)
- {
- while(n%isprime[i]==0)
- {
- cnt++;
- n/=isprime[i];
- }
- }
- }
- if(n>1)
- cnt++;
- return cnt;
- }
- void precal()
- {
- fact[0]=0;
- fact[1]=1;
- fact[2]=1;
- fact[3]=2;
- for(ll i=4; i<10000000; i++)
- {
- fact[i]=fact[i-1]+countfact(i);
- // cout<<fact[i]<<endl;
- if(fact[i]>10000005)
- {
- sz=i;
- break;
- }
- }
- }
- int main()
- {
- sieve();
- precal();
- ll t,i,j,k,n;
- scanf("%lld",&t);
- while(t--)
- {
- scanf("%lld",&n);
- //cout<<sz<<endl;
- ll res=upper_bound(fact,fact+2703664,n)-fact;
- cout<<res<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement