Cod sursa(job #629283)

Utilizator sunt_emoSunt emo sunt_emo Data 3 noiembrie 2011 01:07:56
Problema Suma si numarul divizorilor Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define N 500000
#define M 1000000

char l[N+10];
int pr[79000],i,k=1;
long long j,np=1,m,n1,n2;
short t,d,s;

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