Cod sursa(job #628930)

Utilizator sunt_emoSunt emo sunt_emo Data 2 noiembrie 2011 13:07:34
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#define N 1000001

long long l[N+10],p[79000],i,k=2,j,np=0,d,m,t,n,q,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<=N) {
        while (!l[k]) k++;
        p[np++]=k;
        for (j=k; j<N; j+=k) l[j]=0;
    }
    np--;
    fscanf (in,"%lld",&t);
    for (i=0; i<t; i++) {
        fscanf (in,"%lld",&n);
        s=d=1;
        for (m=0; m<np&&p[m]<=n; m++) {
            j=p[m];
            if (!(n%j)) {
                k=1;
                q=j*j;
                while (!((n=n/j)%j)) {
                    k++;
                    q*=j;
                }
                d*=(k+1);
                s*=(q-1)/(j-1);
                s%=9973;
            }
        }
        fprintf (out,"%lld %lld\n",d,s);
    }
    fclose (in); fclose (out);
    return 0;
}