Cod sursa(job #1160362)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 30 martie 2014 14:48:41
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <bitset>

using namespace std;

#define mod 9973

bitset<1000005> viz;
int lista[79005];
int poz;

void erat()
{
    int i,j;
    for(i=3;i<1000;i+=2)
        if(!viz[i])
            for(j=i*i;j<1000005;j+=i)
                viz[j]=1;

    lista[++poz]=2;
    for(i=3;i<1000005;i+=2)
        if(!viz[i])
            lista[++poz]=i;
}

long long int cine;
int r1,r2;

void desc()
{
    r1=1;
    r2=1;

    int i;
    int cati;
    int val;
    int suma;

    for(i=1;i<=poz && lista[i]*lista[i]<=cine;i++)
    {
        cati=1;
        suma=1;
        val=lista[i];

        while(cine%lista[i]==0)
        {
            cine/=lista[i];
            cati++;
            suma=(suma+val)%mod;
            val=(val*(lista[i]%mod))%mod;
        }

        r1=(r1*cati)%mod;
        r2=(r2*suma)%mod;
    }

    if(cine>1)
    {
        r1=(r1*2)%mod;
        r2=(r2*((cine+1)%mod))%mod;
    }
}

int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");

    erat();
    int t=0;

    cin>>t;

    while(t--)
    {
        cin>>cine;
        desc();

        cout<<r1<<' '<<r2<<'\n';
    }

    cin.close();
    cout.close();
    return 0;
}