Cod sursa(job #2278844)

Utilizator ianiIani Biro iani Data 8 noiembrie 2018 17:04:37
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MOD=9973;

void sumadiv(int x,int &nrdiv, int &sdiv)
{
    int d=2,p=0,e=1;
    nrdiv=1;
    sdiv=1;
    while (x%d==0)
    {
        x/=d;
        e=e*d;
        p++;
    }
    if(p!=0)
    {
        nrdiv*=(p+1);
        e=e*d;
        sdiv=(1LL * sdiv*(e-1)/(d-1))%MOD;
    }
    for (d=3;d*d<=x;d+=2)
    {
        p=0;
        while (x%d==0)
        {
            x/=d;
            e=e*d;
            p++;
        }
        if(p!=0)
        {
            nrdiv*=(p+1);
            e=e*d;
            sdiv=(1LL * sdiv*(e-1)/(d-1))%MOD;
        }
    }
    if (x!=1)
    {
        nrdiv*=2;
        sdiv=(1LL * sdiv*(x*x-1)/(x-1))%MOD;
    }
}

int main()
{
    ifstream fin ("ssnd.in");
    ofstream fout ("ssnd.out");
    int n;
    fin>>n;
    for (int var=0;var<n;++var)
    {
        int x,nrdiv,sdiv;
        fin>>x;
        sumadiv(x,nrdiv,sdiv);
        fout<<nrdiv<<' '<<sdiv<<'\n';
        //cout<<x<<' '<<nrdiv<<' '<<sdiv<<endl;
    }
    return 0;
}