Cod sursa(job #1261417)

Utilizator Antonio1Macovei Antonio Antonio1 Data 12 noiembrie 2014 12:40:14
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
using namespace std;
char ciur[1200001];
int main ()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int f, i, n, prim=2, t, p, j;
    long long x;
    while(prim*prim<=1200000)
    {
        for(i=2; i<=1200000/prim; i++)
            ciur[prim*i]=1;
        prim++;
        while(ciur[prim]==1)
            prim++;
    }
    int nrdiv;
    long long suma;
    scanf("%I64d",&n);
    for(j=1; j<=n; j++)
    {
        scanf("%I64d",&x);
        nrdiv=1;
        suma=1;
        for(f=2; f*f<=x; f++)
            if(ciur[f]==0)
            {
                p=0;
                t=1;
                while(x%f==0)
                {
                    x/=f;
                    p++;
                    t*=f;
                }
                if(p!=0)
                    nrdiv=nrdiv*(p+1);
                if(t!=1)
                    suma=suma*(f*t-1)/(f-1);
            }
        if(x!=1)
        {
            nrdiv=nrdiv*2;
            suma=suma*(x*x-1)/(x-1);
        }
        suma=suma%9973;
        printf("%d %I64d\n",nrdiv,suma);
    }
    return 0;
}