Cod sursa(job #1155996)

Utilizator sorynsooSorin Soo sorynsoo Data 27 martie 2014 12:35:49
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <vector>
using namespace std;
#define phi 9973
#define mod 9973
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
long long n,t,i,aux,ind,contor,nrd,sumd;
bool prim[2000010];
vector<long long> p;
void ciur()
{
    for(int i=2; i<=1000000; i++)
    {
        if(!prim[i])
        {
            p.push_back(i);
            for(int j=i+i; j<=1000000; j+=i)
                prim[j]=1;
        }
    }
}
long long putere(long long n, long long  x)
{
    long long p = 1;
    while(x)
    {
        if(x%2==1)
        {
            p*=n; p%=mod;
            x--;
        }
        n*=n; n%=mod;
        x/=2;
    }
    return p;

}
int main()
{
    ciur();
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>t; aux=t; ind=0; nrd=1, sumd=1;
        while(p[ind]<=t)
        {
            int x=p[ind];
            if(t%p[ind]==0)
            {
                contor=0;
                while(t%p[ind]==0)
                {
                    contor++;
                    t/=p[ind];
                }
                nrd=nrd*(contor+1); nrd%=mod;
                sumd=sumd*( ((putere(x,contor+1))-1) * putere(x-1,9971)% 9973 );
                sumd%=mod;
            }
            if(t==1)
                break;
            ind++;
        }
        if(nrd==1) nrd++;
        cout<<nrd<<" "<<sumd<<"\n";
    }

}