Cod sursa(job #2911101)

Utilizator Deleanu_LucaDeleanu Luca Deleanu_Luca Data 26 iunie 2022 22:04:12
Problema Suma si numarul divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>
#define MOD 9973

using namespace std;

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

long long n,nc,t,p,e,sd,nrd,x,i,j;
bool v[1000001];

void ciur()
{
    v[0]=v[1]=1;
    for(i=2; i*i<=1000000; i++)
        if(v[i]==0)
        {
            for(j=i*i; j<=1000000; j+=i)
                v[j]=1;
        }
}

int main()
{
    ciur();
    fin>>t;
    for(int i=1; i<=t; i++)
    {
        fin>>n;
        sd=nrd=1;

        for(p=1; p*p<=n; p++)
        {
            if(n%p==0)
            {
                if(v[p]==0)
                {
                    e=0;
                    x=p;
                    nc=n;

                    while(nc%p==0)
                    {
                        e++;
                        x*=p;
                        nc/=p;
                    }

                    nrd*=e+1;
                    sd*=(x-1)/(p-1)%MOD;
                }

                if(v[n/p]==0)
                {
                    e=0;
                    x=n/p;
                    nc=n;

                    while(nc%(n/p)==0)
                    {
                        e++;
                        x*=n/p;
                        nc/=n/p;
                    }

                    nrd*=e+1;
                    sd*=(x-1)/(n/p-1)%MOD;
                }
            }
        }
        fout<<nrd<<' '<<sd%MOD<<'\n';
    }
    return 0;
}