Cod sursa(job #2373702)

Utilizator PopeangaMihneaPopeanga Mihnea- Stefan PopeangaMihnea Data 7 martie 2019 14:54:13
Problema Suma si numarul divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long x, k, t;
bool ciur[1000001];
long long prime[80000];
const long long MOD=9973;

void compute_ssnd(long long x)
{
    long long k=1;
    long long ndivs=1;
    long long sumdivs=1;
    while(prime[k]*prime[k]<=x)
    {
        int e=0;
        long long nr=prime[k];
        if(x%prime[k]==0)
        {
            while(x%prime[k]==0)
            {
                x=x/prime[k];
                ++e;
                nr=nr*prime[k];
            }
        }
        if(e>0)
        {
            ndivs=ndivs*(e+1);
            sumdivs=sumdivs*(nr-1)/(prime[k]-1)%MOD;
        }
        ++k;
    }
    if(x>1)
    {
        ndivs=ndivs*2;
        sumdivs=sumdivs*(x*x-1)/(x-1)%MOD;
    }
    fout<<ndivs<<" "<<sumdivs<<"\n";
}

int main()
{
    for(int d=2; d*d<=1000000; ++d)
    {
        if(!ciur[d])
        {
            prime[++k]=d;
            for(int i=d*d; i<=1000000; i=i+d) ciur[i]=1;
        }
    }
    fin>>t;
    while(t--)
    {
        int x;
        fin>>x;
        compute_ssnd(x);
    }
    return 0;
}