Cod sursa(job #628983)

Utilizator sapiensCernov Vladimir sapiens Data 2 noiembrie 2011 15:28:05
Problema Suma si numarul divizorilor Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#define N 1000000

char l[N+10];
int p[79000],i,k=2;
long long j,np=0,m,n,n2;
short t,d,s;

int main ()
{
    FILE * in=fopen ("ssnd.in","r");
    FILE * out=fopen ("ssnd.out","w");
    for (i=2; i<N; i++) l[i]=1;
    while (k*k<=N) {
        while (!l[k]) k++;
        p[np++]=k;
        for (j=k; j<N; j+=k) l[j]=0;
    }
    for (; k<N; k++) if (l[k]) p[np++]=k;
    //for (i=0; i<np; i++) printf ("%d\n",p[i]);
    fscanf (in,"%hd",&t);
    for (i=0; i<t; i++)
    {
        fscanf (in,"%lld",&n);
        s=d=1;
        for (m=0; p[m]*p[m]<=n; m++)
        {
            j=p[m];
            if (!(n%j))
            {
                n2=n;
                k=1;
                while (!((n=n/j)%j)) k++;
                d*=(k+1);
                s=s*(n2/n*j-1)/(j-1)%9973;
            }
        }
        if (n!=1)
        {
            d*=2;
            s=s*(n*n-1)/(n-1)%9973;
        }
        fprintf (out,"%hd %hd\n",d,s);
    }
    fclose (in);
    fclose (out);
    return 0;
}