Cod sursa(job #1692387)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 20 aprilie 2016 19:26:33
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#define MAXN 1000000
#define MOD 9973
char ciur[MAXN+1];
long long prim[MAXN];
int main(){
    FILE*fi,*fout;
    int i,t,nprim,nrdiv,j,e;
    long long n,sum,prod;
    fi=fopen("ssnd.in" ,"r");
    fout=fopen("ssnd.out" ,"w");
    for(i=2;i*i<=MAXN;i++)
      if(ciur[i]==0)
         for(j=i*i;j<=MAXN;j+=i)
           ciur[j]=1;
    nprim=0;
    for(i=2;i<=MAXN;i++)
      if(ciur[i]==0)
         prim[nprim++]=i;
    fscanf(fi,"%d" ,&t);
    while(t>0){
       t--;
       fscanf(fi,"%lld" ,&n);
       j=0;
       nrdiv=1;
       sum=1;
       while(j<nprim&&prim[j]*prim[j]<=n){
           prod=1;
           e=0;
           while(n%prim[j]==0){
              n/=prim[j];
              prod*=prim[j];
              e++;
           }
           nrdiv=nrdiv*(e+1);
           if(prod>1){
              sum=sum*(prod*prim[j]-1)/(prim[j]-1);
              sum=sum%MOD;
           }
           j++;
       }
       if(n>1){
          nrdiv=nrdiv*2;
          sum=sum*(n*n-1)/(n-1);
          sum%=MOD;
       }
       fprintf(fout,"%d %lld\n" ,nrdiv,sum);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}