Cod sursa(job #1259629)

Utilizator isa_edi_cristeaEdi Cristea isa_edi_cristea Data 10 noiembrie 2014 11:46:34
Problema Suma si numarul divizorilor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#define CIUR 1000000
#define MOD 9973
#define NRPR 78498
int v[NRPR], ind = 0;
char nep[CIUR + 1];

void ciur(int n){
  int i, j;
  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++;
  }
}

int main(){
  FILE *in = fopen("ssnd.in", "r");
  FILE *out = fopen("ssnd.out", "w");
  ciur(CIUR);
  int t, i, j, pw, nd;
  long long n, sd, nr;
  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 %= MOD;
      }
      j++;
    }
    if(n > 1){
      nd *= 2;
      sd *= n + 1;
      sd %= MOD;
    }
    fprintf(out, "%d %lld\n", nd, sd);
  }
  return 0;
}