Cod sursa(job #1582124)

Utilizator GuzgleteBumbu Alexandru Guzglete Data 27 ianuarie 2016 17:58:09
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int a[1000005];
int maxim=1000005;
void ciur ()
{
    for (int i=2;i<=maxim;i++)
        a[i]=1;
    for (int i=2;i<=maxim;i++)
    {
        if (a[i]!=0)
            for (int j=i+i;j<=maxim;j+=i)
                a[j]=0;
    }
}

int putere (int x, int y)
{
    int p=1;
    for (int i=1;i<=y;i++)
        p*=x;
    return p;
}

int main()
{
    int t,nr,s,d,p;
    long long int n;
    ciur();
    fin>>t;
    for (int i=1;i<=t;i++)
    {
        fin>>n;
        if (a[n]==1)
            fout<<"2 "<<1+n<<"\n";
        else
        {
            nr=1;
            s=1;
            p=0;
            while (n%2==0)
            {
                n/=2;
                p++;
            }
            nr*=p+1;
            if (p!=0)
                s*=putere (2,p+1)-1;
            d=3;
            while (n!=1)
            {
                p=0;
                while (n%d==0)
                {
                    n/=d;
                    p++;
                }
                nr*=p+1;
                if (p!=0)
                    s*=(putere (d,p+1)-1) / (d-1);
            }
            fout<<nr<<" "<<s%9973<<"\n";
        }
    }

    return 0;
}