Submission #55308429


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define M1 1000000007
#define M2 998244353
#define ll long long
#define ld long double
#define pll pair<ll,ll>
#define REP(i,a,b) for(ll i=a;i<b;i++)
#define REPI(i,a,b) for(ll i=b-1;i>=a;i--)
#define F first
#define S second
#define PB push_back
#define DB pop_back
#define MP make_pair
#define MT make_tuple
#define G(a,b) get<a>(b)
#define V(a) vector<a>

static mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template<typename T>
#define o_set(T) tree<T, null_type,less<T>, rb_tree_tag,tree_order_statistics_node_update>
//member functions :
//1. order_of_key(k) : number of elements strictly lesser than k
//2. find_by_order(k) : k-th element in the set

pll Egcd(ll,ll);
pll Egcd(ll x,ll y)
{
    if(x==0) return MP(0,1);
    pll t=Egcd(y%x,x);
    return MP(t.S-t.F*(y/x),t.F);
}

ll powM(ll x,ll y,ll m)
{
    ll ans=1,r=1;
    x%=m;
    while(r>0&&r<=y)
    {
        if(r&y)
        {
            ans*=x;
            ans%=m;
        }
        r<<=1;
        x*=x;
        x%=m;
    }
    return ans;
}

ll modI(ll a, ll m)
{
    ll m0=m,y=0,x=1;
    if(m==1) return 0;
    while(a>1)
    {
        ll q=a/m;
        ll t=m;
        m=a%m;
        a=t;
        t=y;
        y=x-q*y;
        x=t;
    }
    if(x<0) x+=m0;
    return x;
}

void Miden(ll **p1,ll n)
{
    ll (*x)[n]=(ll(*)[n]) p1;
    REP(i,0,n)
    {
        REP(j,0,n)
        {
            x[i][j]=0;
        }
        x[i][i]=1;
    }
    return;
}

void Mmult(ll **p1,ll **p2,ll **ans,ll x,ll y,ll z,ll m)
{
    ll (*a)[y]=(ll (*)[y])p1;
    ll (*b)[z]=(ll (*)[z])p2;
    ll (*c)[z]=(ll (*)[z])ans;
    REP(i,0,x)
    {
        REP(j,0,z)
        {
            c[i][j]=0;
            REP(k,0,y)
            {
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=m;
            }
        }
    }
    return;
}

void Mpow(ll **p1,ll **ans,ll n,ll y,ll m)
{
    if(y==0)
    {
        Miden(ans,n);
        return;
    }
    ll t[n][n];
    Mpow(p1,(ll **)t,n,y/2,m);
    ll z[n][n];
    Mmult((ll **)t,(ll **)t,(ll **)z,n,n,n,m);
    if(y%2)
    {
        Mmult((ll **)z,p1,ans,n,n,n,m);
    }
    else
    {
        Miden((ll **)t,n);
        Mmult((ll **)z,(ll **)t,ans,n,n,n,m);
    }
    return;
}

bool isprime(ll n)
{
    if(n<2)
        return false;
    for(ll x:{2,3,5,7,11,13,17,19,23,29,31,37})
    {
        if(n==x)
            return true;
        bool flag=true;
        ll r=1;
        ll t=1;
        while(r<=((n-1)>>__builtin_ctzll(n-1)))
        {
            if(r&((n-1)>>__builtin_ctzll(n-1)))
                t=((__int128)t*x)%n;
            x=((__int128)x*x)%n;
            r<<=1;
        }
        if(t==1||t==n-1)
            flag=false;
        for(r=0;r<__builtin_ctzll(n-1);r++)
        {
            t=((__int128)t*t)%n;
            if(t==n-1)
                flag=false;
        }
        if(flag)
            return false;
    }
    return true;
}

ll PrimRoot(ll p,ll x)
{
    //finds primitive root of prime p greater than x(If it doesnt exist, returns 0)
    V(ll) v;
    ll t=p-1;
    REP(i,2,t+1)
    {
        if(i*i>t) break;
        if(t%i==0)
        {
            v.PB((p-1)/i);
            while(t%i==0)
            {
                t/=i;
            }
        }
    }
    if(t>1) v.PB((p-1)/t);
    REP(i,x+1,p)
    {
        ll flag=0;
        REP(j,0,((ll)v.size()))
        {
            if(powM(i,v[j],p)==1)
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            return i;
        }
    }

    return 0;
}

void fft(V(ll) &a,ll n,bool invert,ll m,ll x)
{
    REP(i,0,n)
    {
        ll y=0;
        REP(j,0,__builtin_ctzll(n))
        {
            if((1LL<<j)&i)
            {
                y|=(1LL<<(__builtin_ctzll(n)-j-1));
            }
        }
        if(y>i)
        {
            swap(a[i],a[y]);
        }
    }
    if(invert) x=modI(x,m);
    REP(s,1,__builtin_ctzll(n)+1)
    {
        ll y=powM(x,(n/(1LL<<s)),m);
        REP(j,0,(n/(1LL<<s)))
        {
            ll r=1;
            REP(i,0,(1LL<<(s-1)))
            {
                ll u=a[i+j*(1LL<<s)];
                ll v=(r*a[i+j*(1LL<<s)+(1LL<<(s-1))])%m;
                a[i+j*(1LL<<s)]=u+v;
                if(a[i+j*(1LL<<s)]>m) a[i+j*(1LL<<s)]-=m;
                a[i+j*(1LL<<s)+(1LL<<(s-1))]=u-v;
                if(a[i+j*(1LL<<s)+(1LL<<(s-1))]<0) a[i+j*(1LL<<s)+(1LL<<(s-1))]+=m;
                r*=y;
                r%=m;
            }
        }
    }
    if(invert)
    {
        ll invn=modI(n,m);
        REP(i,0,n)
        {
            a[i]=(a[i]*invn)%m;
        }
    }
    return;
}

void PolyMult(V(ll) &a,V(ll) &b,V(ll) &v,ll m,ll x)
{
    ll n=1;
    while(n<((ll)a.size())+((ll)b.size()))
    { 
        n<<=1;
    }
    V(ll) fa(a.begin(),a.end());
    fa.resize(n,0);
    V(ll) fb(b.begin(),b.end());
    fb.resize(n,0);
    ll y=powM(x,(m-1)/n,m);
    fft(fa,n,false,m,y);
    fft(fb,n,false,m,y);
    v.resize(n,0);
    REP(i,0,n)
    {
        v[i]=((fa[i]*fb[i])%m);
    }
    fft(v,n,true,m,y);
    v.resize(((ll)a.size())+((ll)b.size())-1,0LL);
    return;
}

void PolyInverse(V(ll) &a,V(ll) &v,ll n,ll m,ll x)
{
    v.clear();
    v.PB(modI(a[0],m));
    while(((ll)v.size())<n)
    {
        ll tmpsz=(((ll)v.size())<<1);
        V(ll) tmpa(tmpsz,0LL);
        REP(i,0,min(((ll)a.size()),tmpsz))
        {
            tmpa[i]=a[i];
        }
        V(ll) tmppr;
        PolyMult(tmpa,v,tmppr,m,x);
        tmppr.resize(tmpsz,0LL);
        REP(i,0,tmpsz)
        {
            tmppr[i]=((m-tmppr[i])%m);
        }
        tmppr[0]=((tmppr[0]+2)%m);
        V(ll) tmpv(v.begin(),v.end());
        PolyMult(tmppr,tmpv,v,m,x);
        v.resize(tmpsz,0LL);
    }
    v.resize(n,0LL);
    return;
}

void PolyDiv(V(ll) &a,V(ll) &b,V(ll) &q,V(ll) &r,ll m,ll x)
{
    if(((ll)a.size())<((ll)b.size()))
    {
        r=a;
        r.resize(((ll)b.size())-1,0LL);
        q.clear();
        q.PB(0LL);
        return;
    }
    V(ll) ra(((ll)a.size())-((ll)b.size())+1,0LL);
    REP(i,0,((ll)a.size())-((ll)b.size())+1)
    {
        ra[i]=a[((ll)a.size())-1-i];
    }
    V(ll) rb(((ll)b.size()),0LL);
    REP(i,0,((ll)b.size()))
    {
        rb[i]=b[((ll)b.size())-1-i];
    }
    V(ll) irb;
    PolyInverse(rb,irb,((ll)a.size())-((ll)b.size())+1,m,x);
    V(ll) rq;
    PolyMult(ra,irb,rq,m,x);
    rq.resize(((ll)a.size())-((ll)b.size())+1,0LL);
    q.resize(((ll)a.size())-((ll)b.size())+1,0LL);
    REP(i,0,((ll)rq.size()))
    {
        q[i]=rq[((ll)rq.size())-1-i];
    }
    V(ll) tmppr;
    PolyMult(b,q,tmppr,m,x);
    r.resize(((ll)b.size())-1,0LL);
    REP(i,0,((ll)r.size()))
    {
        r[i]=((a[i]+m-tmppr[i])%m);
    }
    return;
}

ll fn(ll x,ll rn[])
{
    if(x==rn[x])
        return x;
    else
        return rn[x]=fn(rn[x],rn);
}

bool un(ll x,ll y,ll rn[],ll sz[])
{
    x=fn(x,rn);
    y=fn(y,rn);
    if(x==y)
        return false;
    if(sz[x]<sz[y])
        swap(x,y);
    sz[x]+=sz[y];
    rn[y]=x;
    return true;
}

void build(ll v,ll tl,ll tr,ll st[],ll lz[],bool f[],ll a[])
{
    if(tl==tr)
    {
        st[v]=a[tl];
        lz[v]=0LL;
        f[v]=false;
        return;
    }
    build((v<<1),tl,((tl+tr)>>1),st,lz,f,a);
    build((v<<1)|1,((tl+tr)>>1)+1,tr,st,lz,f,a);
    //operation
    st[v]=st[(v<<1)]+st[(v<<1)|1];
    lz[v]=0LL;
    f[v]=false;
    return;
}

void push(ll v,ll tl,ll tr,ll st[],ll lz[],bool f[])
{
    if(f[v])
    {
        //operation
        st[(v<<1)]=lz[(v<<1)]=st[(v<<1)|1]=lz[(v<<1)|1]=0LL;
        f[(v<<1)]=f[(v<<1)|1]=true;
        f[v]=false;
    }
    //operation
    st[(v<<1)]+=lz[v]*(((tl+tr)>>1)-tl+1);
    //operation
    lz[(v<<1)]+=lz[v];
    //operation
    st[(v<<1)|1]+=lz[v]*(tr-((tl+tr)>>1));
    //operation
    lz[(v<<1)|1]+=lz[v];
    lz[v]=0LL;
    return;
}

void update(ll v,ll tl,ll tr,ll l,ll r,ll val,bool set,ll st[],ll lz[],bool f[])
{
    if(l>r)
    {
        return;
    }
    if(l==tl&&tr==r)
    {
        if(set)
        {
            //operation
            st[v]=lz[v]=0LL;
            f[v]=true;
        }
        //operation
        st[v]+=val*(tr-tl+1);
        //operation
        lz[v]+=val;
        return;
    }
    push(v,tl,tr,st,lz,f);
    update((v<<1),tl,((tl+tr)>>1),l,min(r,((tl+tr)>>1)),val,set,st,lz,f);
    update((v<<1)|1,((tl+tr)>>1)+1,tr,max(l,((tl+tr)>>1)+1),r,val,set,st,lz,f);
    //operation
    st[v]=st[(v<<1)]+st[(v<<1)|1];
    return;
}

ll query(ll v,ll tl,ll tr,ll l,ll r,ll st[],ll lz[],bool f[])
{
    if(l>r)
    {
        return 0LL;
    }
    if(l==tl&&tr==r)
    {
        return st[v];
    }
    push(v,tl,tr,st,lz,f);
    //operation
    return query((v<<1),tl,((tl+tr)>>1),l,min(r,((tl+tr)>>1)),st,lz,f)+query((v<<1)|1,((tl+tr)>>1)+1,tr,max(l,((tl+tr)>>1)+1),r,st,lz,f);
}

ll tonelli_shanks(ll x,ll p)
{
    // Outputs a y such that (y^2)%p=x, or -1 if it doesn't exist

    if(powM(x,(p-1)/2,p)==p-1) return -1;

    ll q=((p-1)>>__builtin_ctzll(p-1)),s=__builtin_ctzll(p-1)-1;
    ll r=powM(x,(q+1)/2,p),t=powM(x,q,p);

    ll z;
    while(true)
    {
        z=rng()%(p-1)+1;
        if(powM(z,(p-1)/2,p)==p-1) break;
    }
    z=powM(z,q,p);

    while(t!=1)
    {
        if(powM(t,1LL<<(s-1),p)==p-1)
        {
            t=(t*((z*z)%p))%p;
            r=(r*z)%p;
        }
        z=(z*z)%p;
        s--;
    }

    return r;
}

void StirlingFirstKind(V(ll) &v, ll n, ll m, ll x)
{
    v.resize(n+1,0LL);

    if(n==0)
    {
        v[0]=1;
    }
    else if(n%2==1)
    {
        V(ll) tmp;
        StirlingFirstKind(tmp, n-1, m, x);

        REP(i,0,n)
        {
            v[i+1] = (( v[i+1] + tmp[i] )%m);
            v[i] = (( v[i] + (( tmp[i] * (n-1) )%m) )%m);
        }
    }
    else
    {
        V(ll) tmp;
        StirlingFirstKind(tmp, (n>>1), m, x);

        V(ll) fc((n>>1)+1,0LL);
        fc[0]=1LL;
        REP(i,1,(n>>1)+1)
        {
            fc[i] = (( fc[i-1] * i )%m);
        }

        V(ll) fci((n>>1)+1,0LL);
        fci[(n>>1)]=modI(fc[(n>>1)],m);
        REPI(i,0,(n>>1))
        {
            fci[i] = (( fci[i+1] * (i+1) )%m);
        }

        V(ll) tmp2((n>>1)+1,0LL);
        tmp2[0]=1LL;
        REP(i,1,(n>>1)+1)
        {
            tmp2[i] = (( (( tmp2[i-1] * (n>>1) )%m) * (( fci[i] * fc[i-1] )%m) )%m);
        }

        V(ll) tmp3((n>>1)+1,0LL);
        REP(i,0,(n>>1)+1)
        {
            tmp3[i] = (( tmp[(n>>1)-i] * fc[(n>>1)-i] )%m);
        }

        V(ll) tmp4;
        PolyMult(tmp2,tmp3,tmp4,m,x);

        tmp4.resize((n>>1)+1,0LL);
        reverse(tmp4.begin(),tmp4.end());
        REP(i,0,(n>>1)+1)
        {
            tmp4[i] = (( tmp4[i] * fci[i] )%m);
        }

        PolyMult(tmp,tmp4,v,m,x);
    }

    return;
}

void StirlingSecondKind(V(ll) &v, ll n, ll m, ll x)
{
    V(ll) fc(n+1,0LL);
    fc[0]=1LL;
    REP(i,1,n+1)
    {
        fc[i] = (( fc[i-1] * i )%m);
    }

    V(ll) fci(n+1,0LL);
    fci[n]=modI(fc[n],m);
    REPI(i,0,n)
    {
        fci[i] = (( fci[i+1] * (i+1) )%m);
    }

    V(ll) tmp1(n+1,0LL);
    REP(i,0,n+1)
    {
        if(i&1LL) tmp1[i] = (m - fci[i]) % m;
        else tmp1[i] = fci[i];
    }

    V(ll) tmp2(n+1,0LL);   
    REP(i,0,n+1)
    {
        tmp2[i] = powM(i,n,m) * fci[i] % m;
    }

    PolyMult(tmp1,tmp2,v,m,x);

    v.resize(n+1,0LL);

    return;
}

ll sqrtint(ll x) {
    ll l = 1, r = x;
    while(l < r) {
        ll m = (l+r)/2+1;

        if(((__int128)m)*m > x) r = m-1;
        else l = m;
    }
    return l;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    ll ntc=1;
    //cin>>ntc;
    REP(tc,1,ntc+1)
    {
        //cout<<"Case #"<<tc<<": ";

        static const int N = 1000005;
        static int d[N]; iota(d, d+N, 0);
        static vector<int> primes;
        for(int x = 2; x < N; x++) {
            if(d[x] == x) primes.push_back(x);

            for(int i = 0;(
                    i < primes.size()
                    && primes[i] <= d[x]
                    && x * primes[i] < N
                ); i++) {
                    d[x*primes[i]] = primes[i];
                }
        }

        ll n;
        cin>>n;
        set<ll> st;
        // cout<<sqrtint(n)<<'\n';
        for(int a = 2; a < N; a++) {
            ll tmp = sqrtint(a);
            if(tmp * tmp == a) continue;

            __int128 x = 1LL*a*a*a;
            for(; x <= n; x = x*a*a) {
                st.insert(x);
            }
        }

        cout<<sqrtint(n) + st.size();


        cout<<'\n';
    }

    return 0;
}

Submission Info

Submission Time
Task F - x = a^b
User EnEm
Language C++ 20 (gcc 12.2)
Score 500
Code Size 13336 Byte
Status AC
Exec Time 184 ms
Memory 54548 KiB

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:611:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  611 |                     i < primes.size()
      |                     ~~^~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 76
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt
Case Name Status Exec Time Memory
sample_01.txt AC 60 ms 7528 KiB
sample_02.txt AC 182 ms 54416 KiB
test_01.txt AC 51 ms 7592 KiB
test_02.txt AC 51 ms 7564 KiB
test_03.txt AC 51 ms 7660 KiB
test_04.txt AC 51 ms 7520 KiB
test_05.txt AC 51 ms 7656 KiB
test_06.txt AC 51 ms 7656 KiB
test_07.txt AC 51 ms 7548 KiB
test_08.txt AC 51 ms 7608 KiB
test_09.txt AC 51 ms 7720 KiB
test_10.txt AC 51 ms 7648 KiB
test_11.txt AC 51 ms 7588 KiB
test_12.txt AC 51 ms 7664 KiB
test_13.txt AC 51 ms 7556 KiB
test_14.txt AC 51 ms 7660 KiB
test_15.txt AC 51 ms 7652 KiB
test_16.txt AC 51 ms 7652 KiB
test_17.txt AC 51 ms 7692 KiB
test_18.txt AC 51 ms 7664 KiB
test_19.txt AC 51 ms 7716 KiB
test_20.txt AC 51 ms 7664 KiB
test_21.txt AC 168 ms 49560 KiB
test_22.txt AC 169 ms 50188 KiB
test_23.txt AC 134 ms 37788 KiB
test_24.txt AC 157 ms 47164 KiB
test_25.txt AC 157 ms 46220 KiB
test_26.txt AC 176 ms 52276 KiB
test_27.txt AC 177 ms 52892 KiB
test_28.txt AC 135 ms 39212 KiB
test_29.txt AC 134 ms 37852 KiB
test_30.txt AC 117 ms 32140 KiB
test_31.txt AC 181 ms 54416 KiB
test_32.txt AC 182 ms 54416 KiB
test_33.txt AC 160 ms 46624 KiB
test_34.txt AC 157 ms 46568 KiB
test_35.txt AC 158 ms 46656 KiB
test_36.txt AC 182 ms 54376 KiB
test_37.txt AC 184 ms 54420 KiB
test_38.txt AC 180 ms 54380 KiB
test_39.txt AC 184 ms 54416 KiB
test_40.txt AC 183 ms 54388 KiB
test_41.txt AC 183 ms 54320 KiB
test_42.txt AC 177 ms 53800 KiB
test_43.txt AC 178 ms 53004 KiB
test_44.txt AC 178 ms 54220 KiB
test_45.txt AC 177 ms 53404 KiB
test_46.txt AC 172 ms 50944 KiB
test_47.txt AC 177 ms 52464 KiB
test_48.txt AC 170 ms 51200 KiB
test_49.txt AC 148 ms 43152 KiB
test_50.txt AC 163 ms 48448 KiB
test_51.txt AC 155 ms 44924 KiB
test_52.txt AC 116 ms 32464 KiB
test_53.txt AC 117 ms 32060 KiB
test_54.txt AC 159 ms 46136 KiB
test_55.txt AC 170 ms 50780 KiB
test_56.txt AC 135 ms 38820 KiB
test_57.txt AC 134 ms 38472 KiB
test_58.txt AC 149 ms 43448 KiB
test_59.txt AC 183 ms 54548 KiB
test_60.txt AC 84 ms 20772 KiB
test_61.txt AC 143 ms 41480 KiB
test_62.txt AC 184 ms 54408 KiB
test_63.txt AC 134 ms 38564 KiB
test_64.txt AC 125 ms 34876 KiB
test_65.txt AC 52 ms 7644 KiB
test_66.txt AC 51 ms 7604 KiB
test_67.txt AC 76 ms 17252 KiB
test_68.txt AC 55 ms 9220 KiB
test_69.txt AC 55 ms 8912 KiB
test_70.txt AC 53 ms 8168 KiB
test_71.txt AC 52 ms 8080 KiB
test_72.txt AC 52 ms 8000 KiB
test_73.txt AC 51 ms 7552 KiB
test_74.txt AC 177 ms 53764 KiB