Cod sursa(job #792109)

Utilizator alexpascadiAlexandru Pascadi alexpascadi Data 26 septembrie 2012 15:39:29
Problema Suma si numarul divizorilor Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>

char nuprim[1000002];
int p[300000];

int main()
{
    FILE *f, *g;
    f=fopen("ssnd.in","r");
    g=fopen("ssnd.out","w");

    int n,i,j,t,nr=0,pu, e, numar, suma;
    fscanf(f,"%d",&t);

    //printf("am ajuns aici\n");

    for(i=2;i*i<=1000001;i++)
    {
        if(nuprim[i]==0)
        {
            for(j=i*i;j<=1000001;j+=i) nuprim[j]=1;
        }
    }

    //printf("am ajuns aici\n");

    for(i=2;i<=1000000;i++) if(nuprim[i]==0) p[++nr]=i;

    for(i=1;i<=t;i++)
    {
        //printf("am ajuns aici\n");
        numar=1; suma=1;
        fscanf(f,"%d",&n);
        for(j=1;p[j]*p[j]<=n;j++)
        {
            pu=1; e=0;
            while(n%p[j]==0)
            {
                e++;
                pu*=p[j];
                n/=p[j];
            }
            numar*=(e+1);
            suma=(suma*(pu*p[j]-1)/(p[j]-1))%9973;
        }
        //printf("am ajuns aici\n");
        if(n!=1)
        {
            numar*=2;
            suma=(suma*(n+1))%9973;
        }
        fprintf(g,"%d %d\n",numar,suma);
    }
    return 0;

}