Cod sursa(job #2591272)

Utilizator OvidRata Ovidiu Ovid Data 30 martie 2020 11:00:08
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define MOD 9973
ifstream fin("ssnd.in"); ofstream fout("ssnd.out");



ll n, t, q, k, l;






int main(){

vector<ll> p;
vector<bool> v;
v.assign(1000010,false);

for(int i=1; i<=1000000; i++){
    if(v[i]==false){

    for(int j=2; j<=i; j++){
        if(j*i>=1000005){break;}
        v[j*i]=true;
    }

    }
}

for(int i=1; i<=1000000; i++){
    if(v[i]==false){
        p.pb(i);
    }
}



fin>>t;




for(;t;t--){
    fin>>n;
    ll sum=0;
    ll nr=0;

    for(int i=0; i<p.size() && p[i]<=sqrt(n) ; i++){
            ll d=p[i];
            while( d*d<=n && d<=p[i]*p[i] ){
                if(n%d==0){    if(d*d!=n ){sum+=(d%MOD)+((n/d)%MOD); sum%=MOD; nr+=2;} else{nr+=1; sum+=sqrt(n);} }
                    d+=p[i];
            }

    }
fout<<nr<<" "<<sum<<"\n";
}


return 0;
}