I am having wrong answer with test case 2

//This is my code
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define ll long long
#define d7 1000000007

using namespace std;
ll modexp(ll x, ll n){
if(n==0) return 1;
ll u=modexp(x,n/2);
u=(uu);
if(n%2==1) u=(u
x);
return u;
}

ll N=1e5+4;
vector is_prime(N+1, true);
void validateprime(ll n){
is_prime[0] = is_prime[1] = false;
for (ll i = 2; i <= n; i++) {
if (is_prime[i] && (long long)i * i <= n) {
for (ll j = i * i; j <= n; j += i)
is_prime[j] = false;
}
}
}

vector primes;
void storePrime(ll n){
validateprime(n);
for(ll i=0;i<n;i++){
if(is_prime[i+1]){primes.push_back(i+1);}
}
}

bool isPrime(long long k){
if(k<=1){return false;}
if(k==2){return true;}
if(k%2==0){return false;}
long long i = 3;
while (i*i <= k) {if (k % i == 0) {return false;}i += 2;}
return true;
}

int main(int argc, const char * argv[]) {

validateprime(100000);
storePrime(100000);
ll n;cin>>n;
ll k=n;

//for(ll i=0;i<100;i++){cout<<v[i]<<" ";}
map<ll,ll> mp;
for(ll i=0;i<primes.size();i++){
    if(n%primes[i]==0){
        //cout<<primes[i]<<" ";
        while(n%primes[i]==0&&n>1){
            n/=primes[i];
            mp[primes[i]]++;
        }
    }
}

if(isPrime(n)){
    mp[n]++;
}


if(mp.empty()){
    cout<<1;
}else{
    ll sum1=0;
    for(auto u:mp){
        ll op=u.first;
        ll op1=0;
        while(op>0){
            op1+=(op%10);
            op/=10;
        }
        sum1+=op1*mp[u.first];
    }
    ll sum2=0;
    while(k>0){
        sum2+=(k%10);
        k/=10;
    }
    //cout<<sum1<<" "<<sum2<<" ";
    if(sum2==sum1){
        cout<<1;
    }else{cout<<0;}
}

return 0;

}

@rkrishna
After running your code till sqrt(n). If the value of n is greater than 1 add then number .
YOu can take a look for this code as a reference.