Cod sursa(job #2184292)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 23 martie 2018 21:58:42
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
#define M 9973

using namespace std;

bool a[100010];

void ciur()
{
    while (q)
    {
        q=0;
        for (int i=p+1; i<=n; i++)
        {
            if (!a[i])
            {
                p=i;
                q=1;
                break;
            }
        }
        for (int i=2*p; i<=n; i+=p)
            a[i]=1;
    }
}

void euclid(long long a, long long b, long long &x, long long &y)
{
    if (!b)
    {
        x=1;
        y=0;
        return;
    }
    euclid(b, a%b, x, y);
    long long aux;
    aux=y;
    y=x-(a/b)*y;
    x=aux;
}

int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    long long n, s, p, pr, x, y;
    int t, d, nr;
    fin >> t;
    for (int i=1; i<=t; i++)
    {
        fin >> n;
        d=2;
        s=1;
        p=1;
        while(n>1)
        {
            if (d*d>n)
                break;
            if (a[d])
            {
                nr=0;
                pr=1;
                while(n%d==0)
                    nr++,n/=d,pr*=d;
                pr*=d;
                pr--;
                if (nr)
                {
                    s=s*(nr+1);
                    p=((p%M)*(pr%M))%M;
                    euclid(d-1, M, x, y);
                    while(x<0)
                        x+=M;
                    p=((p%M)*(x%M))%M;
                }
            }
            d++;
        }
        fout << s << " " << p << "\n";
    }
    return 0;
}