Cod sursa(job #2076435)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 26 noiembrie 2017 16:25:39
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <bits/stdc++.h>
#define NM 1000005
#define pb push_back
#define m 9973
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int ciur[NM];
vector<long long> prim,divv;
long long t,n,s,nrdiv,sdiv,auxnr,auxs;
int main()
{
    in>>t;
    for(int i=2;i<=1000000;++i)ciur[i]=1;
    for(long long i=2;i<=1000000;++i)
        if(ciur[i])
        {
            prim.pb(i);
            for(long long j=i*i;j<=1000000;j+=i)
                ciur[j]=0;
        }
    while(t)
    {
        --t;
        in>>n;
        sdiv=1;
        nrdiv=1;
        for(int i=0;n>1 && prim[i]<=sqrt(n);++i)
        {
            auxnr=0;
            auxs=prim[i];
            while(n%prim[i]==0)
            {
                n/=prim[i];
                auxs*=prim[i];
                ++auxnr;
            }
            if(auxnr)
            {
                sdiv=(sdiv*(((auxs-1)/(prim[i]-1))%m)%m);
                nrdiv=(nrdiv*(auxnr+1))%m;
            }
        }
        if(n>1)
        {
            nrdiv*=2;
            sdiv*=(n+1);
        }
        out<<nrdiv%m<<" "<<sdiv%m<<'\n';
    }
    return 0;
}