Cod sursa(job #1259624)

Utilizator isa_edi_cristeaEdi Cristea isa_edi_cristea Data 10 noiembrie 2014 11:43:13
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
int v[100000],nep[100000];
int main(){
  FILE *fin = fopen("ssnd.in", "r");
  FILE *fout = fopen("ssnd.out", "w");
  int t, i, j, pw, nd;
  long long n, sd, nr;
  for(i = 2; i * i <= n; i++){
    if(!nep[i]){
      for(j = i * i; j <= n; j += i){
        nep[j] = 1;
      }
      v[ind] = i;
      ind++;
    }
  }
  while(i <= n){
    if(!nep[i]){
      v[ind] = i;
      ind++;
    }
    i++;
  }
  fscanf(in, "%d", &t);
  for(i = 0; i < t; i++){
    fscanf(in, "%lld", &n);
    sd = 1;
    nd = 1;
    j = 0;
    while(n > 1 && j < ind && v[j] * v[j] <= n){
      if(n % v[j] == 0){
        pw = 0;
        nr = 1;
        while(n % v[j] == 0){
          n /= v[j];
          nr *= v[j];
          pw++;
        }
        nd *= pw + 1;
        sd *= (nr * v[j] - 1) / (v[j] - 1);
        sd %= 9973;
      }
      j++;
    }
    if(n > 1){
      nd *= 2;
      sd *= n + 1;
      sd %= 9973;
    }
    fprintf(out, "%d %lld\n", nd, sd);
  }
  return 0;
}