Cod sursa(job #981033)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 6 august 2013 11:31:48
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <cstring>

#define ULL unsigned long long

using namespace std;

int prim[1000069],nr,t,x,i,j;
bool ok,pm[1000010];

void ciur()
 {
    for (int i = 2; i <= 1000000; i++)
    {
        if (!pm[i])
        {
            prim[++nr] = i;
            for (ULL j = i * i; j <= 1000000; j += i)
                pm[j] = true;
        }
    }
 }




int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d", &t);


    ciur();


    ULL a;
    for (j=1; j<=t; j++)
    {
        scanf("%lld", &a);

        ULL Sd=1, Nrd=1;




        for (i=1; i<nr && (ULL) prim[i]*prim[i]<=a; i++)
           {
            if (a%prim[i]==0)
             {
                ULL y=1, q=prim[i];
            while (a%prim[i]==0)
              {
                  y++; q*=prim[i];
                  a/=prim[i];
              }
               Nrd*=y;
               Sd*=(q-1)/(prim[i]-1); Sd%=9973;

            }
           }

      if (a>1)
        {
            Nrd*=2;
            Sd*=(a*a-1)/(a-1); Sd%=9973;
        }

       printf("%lld %lld\n", Nrd, Sd);

    }




        return 0;
    }