Cod sursa(job #1248633)

Utilizator deea101Andreea deea101 Data 25 octombrie 2014 18:03:33
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <iostream>
#include <cmath>
#define MOD 9973
#define NCIUR 1000000
using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

long long n,T,ciur[2000005],prim[1000000],countP;

void goCiur()
{
    long long i,j;
    for(i=2;i<=NCIUR;i++)
        if(!ciur[i])
        {
            prim[++countP]=i;
            for(j=2*i;j<=NCIUR;j=j+i)
                ciur[j]=1;
        }
}

int exp ( int x , int y )
{
    long long rez=1;
    while(y)
    {
        if(y%2==0)
            x=(x*x)%MOD;
        else
        {
            rez=(rez*x)%MOD;
            x=(x*x)%MOD;
        }
        y/=2;
    }
    return rez;
}

int main()
{

    long long i, nr, s, d, rad, prod, r1, r2;
    f>>T;
    goCiur();
    while(T--)
    {
        f>>n;

        nr=1, s=1;

        rad=int(sqrt(n));
        for(i=1;i<=rad;i++)
        {

            d=0;
            while(n%prim[i]==0)
            {
                d++;
                n/=prim[i];
            }

            nr=(nr*(d+1))%MOD;

            r1=( exp(prim[i],d+1)-1 )%MOD;
            r2=( exp(prim[i]-1,MOD-2) )%MOD;
            prod=(r1*r2)%MOD;

            s=(s*prod)%MOD;
        }

        if( nr==1 && n!=1 )
        {
            nr=2;
            s=n+1;
        }

        g<<nr<<' '<<s<<'\n';
    }

}