Cod sursa(job #3150825)

Utilizator MilitaruMihai2022Millitaru Mihai MilitaruMihai2022 Data 18 septembrie 2023 17:20:16
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MOD=9973;
ifstream f("ssnd.in");
ofstream g("ssnd.out");

int factDiv(int d,int p)
{
    long long s=1;
    while(p--)
    {
        s=s*d+1;
    }
    return s%MOD;
}

void sdiv(long long n,int &nr,long long &sum)
{
    int p=0;
    sum=nr=1;
    if(n%2==0)
    {
        do
        {
            p++;
            n/=2;
        }
        while(n%2==0);
            nr=nr*(p+1);
        sum=factDiv(2,p);
    }
    for(int d=3;1LL*d*d<=n;d+=2)
    {
        if(n%d==0)
        {
            p=0;
            do
            {
                p++;
                n/=d;
            }
            while(n%d==0);
                nr=nr*(p+1);
            sum=sum*factDiv(d,p)%MOD;
        }
    }
    if(n>1)
    {
        nr=nr*2;
        sum=sum*(n+1)%MOD;
    }
}

int main()
{
    int t,nr;
    long long n,sum;
    f>>t;
    while(t--)
    {
        f>>n;
        sdiv(n,nr,sum);
        g<<nr%MOD<<' '<<sum<<'\n';
    }
    f.close();
    g.close();
    return 0;
}