Cod sursa(job #2284838)

Utilizator danielsociuSociu Daniel danielsociu Data 17 noiembrie 2018 17:30:45
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
std::ifstream cin("ssnd.in");
std::ofstream cout("ssnd.out");
#define ll long long
#define maxn 1000005
ll primes[90000];
bool ciur[maxn];
ll t,x,k;

void allPrimes(); //creates all primes to 1 mil

int main()
{
    ll i,nr,s;
    cin>>t;
    allPrimes();
    for(;t--;){
        cin>>x;
        nr=0;s=0;
        for(i=1;primes[i]*primes[i]<x&&i<=k;i++){
            if(x%primes[i]==0){
                nr+=2;
                s=((s+primes[i]+(x/primes[i]))%9973);
            }
        }
        if(primes[i]*primes[i]==x){
            nr++;
            s=((s+primes[i])%9973);
        }
        cout<<nr<<' '<<s<<'\n';
    }
    return 0;
}

void allPrimes(){
    ll i,j;
    primes[1]=1;
    primes[2]=2;
    k=2;
    for(i=4;i<maxn;i+=2){
        ciur[i]=1;
    }
    for(i=3;i<maxn;i+=2)
        if(!ciur[i]){
            primes[++k]=i;
            for(j=i+i+i;j<maxn;j+=(i<<1))
                ciur[j]=1;
        }
}