Cod sursa(job #2870046)

Utilizator cdenisCovei Denis cdenis Data 12 martie 2022 00:42:49
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define ll long long
const int MAX=1e6;
const int MOD=9973;
int t,n,cnt,v[MAX],prim[MAX];

int pow(int n, int p)
{
    int rez=1;
    n%=MOD;
    while(p)
    {
        if(p&1)
            rez=(rez*n)%MOD;
        n=(n*n)%MOD;
        p>>=1;
    }
    return rez;
}

int main()
{
    v[0]=v[1]=1;
    for(int i=2;i<MAX;i++)
        if(!v[i])
        {
            prim[++cnt]=i;
            for(int j=i+i;j<MAX;j+=i)
                v[j]=1;
        }
    fin >> t;
    while(t--)
    {
        fin >> n;
        int nrdiv=1,sumdiv=1;
        for(int i=1,d=2;d*d<=n;d=prim[++i])
            if(n%d==0)
            {
                int k=0,nn=n;
                while(n%d==0)
                    n/=d, k++;
                nrdiv*=k+1;
                int f1=(pow(d,k+1)-1)%MOD;
                int f2=pow(d-1,MOD-2)%MOD;
                sumdiv=(((sumdiv*f1)%MOD)*f2)%MOD;
            }
        if(v[n]==0)
        {
            nrdiv*=2;
            sumdiv=(1LL*sumdiv*(n+1))%MOD;
        }
        fout << nrdiv << " " << sumdiv << '\n';
    }
    return 0;
}