Cod sursa(job #1418253)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 aprilie 2015 15:02:25
Problema Suma si numarul divizorilor Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000001
#define MAXPRIME 78498
#define BIGPRIME 9973
char ciur[MAXN];
int v[MAXPRIME];
int main(){
    FILE*fi,*fout;
    int con,i,j,t,nrdiv,e;
    long long sdiv,p,nr,d;
    fi=fopen("ssnd.in" ,"r");
    fout=fopen("ssnd.out" ,"w");
    fscanf(fi,"%d" ,&t);
    for(i=2;i*i<=MAXN;i++)
        if(ciur[i]==0)
           for(j=i*i;j<=MAXN;j=j+i)
               ciur[j]=1;
    con=0;
    for(i=2;i<=MAXN;i++)
        if(ciur[i]==0)
           v[con++]=i;
    for(i=0;i<t;i++){
        fscanf(fi,"%lld" ,&nr);
        d=v[0];
        nrdiv=j=sdiv=1;
        while(d*d<=nr){
            e=0;
            p=1;
            while(nr%d==0){
                nr=nr/d;
                p=p*d;
                e++;
            }
            sdiv=(sdiv*(p*d-1)/(d-1))%BIGPRIME;
            nrdiv=nrdiv*(e+1);
            d=v[j++];
        }
        if(nr>1){
            nrdiv=nrdiv*2;
            sdiv=(sdiv*(nr*nr-1)/(nr-1))%BIGPRIME;
        }
        fprintf(fout,"%d %lld\n" ,nrdiv,sdiv);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}