Cod sursa(job #1247392)

Utilizator hrazvanHarsan Razvan hrazvan Data 22 octombrie 2014 18:31:48
Problema Suma si numarul divizorilor Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.06 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, n, i, j, pw, sd, nd, nr;
  fscanf(in, "%d", &t);
  for(i = 0; i < t; i++){
    fscanf(in, "%d", &n);
    sd = 1;
    nd = 1;
    j = 0;
    while(n > 1 && j < ind && v[j] * v[j] <= n){
      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 %d\n", nd, sd);
  }
  return 0;
}