Cod sursa(job #2076390)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 26 noiembrie 2017 15:15:15
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 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;
map<long long,long long> fr,val;
long long t,n,s,nrdiv,sdiv;
int main()
{
    in>>t;
    for(int i=2;i<=1000000;++i)ciur[i]=1;
    for(int i=2;i<=1000000;++i)
        if(ciur[i])
        {
            prim.pb(i);
            for(int j=2*i;j<=1000000;j+=i)
                ciur[j]=0;
        }
    while(t)
    {
        --t;
        in>>n;
        fr.clear();
        val.clear();
        divv.clear();
        sdiv=1;
        nrdiv=1;
        for(int i=0;n>1;++i)
        {
            if(n%prim[i]==0)divv.pb(prim[i]);
            while(n%prim[i]==0)
            {
                n/=prim[i];
                if(fr.find(prim[i])==fr.end())
                {
                    val[prim[i]]=prim[i];
                    fr[prim[i]]=2;
                }
                else ++fr[prim[i]];
                val[prim[i]]*=prim[i];
            }
        }
        for(auto i:divv)
        {
            nrdiv*=fr[i];
            nrdiv%=m;
            sdiv*=(val[i]-1)/(i-1);
            sdiv%=m;
        }
        out<<nrdiv<<" "<<sdiv<<'\n';
    }
    return 0;
}