Cod sursa(job #1700842)

Utilizator cella.florescuCella Florescu cella.florescu Data 11 mai 2016 14:48:11
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#define MAXN 1000000
#define MOD 9973

using namespace std;

char ciur[MAXN+1], prime[MAXN];

int main()
{
    FILE *fin, *fout;
    int n, nrp, i, t, d, expo, nrd, smd;
    int x1, x2;
    long long prod;
    nrp=0;
    for(i=2; i*i<=MAXN; i++)
      if(ciur[i]==0){
        prime[nrp++]=i;
        for(d=i*i; d<=MAXN; d+=i)
          ciur[d]=1;
      }
    fin=fopen("ssnd.in", "r");
    fscanf(fin, "%d", &t);
    fout=fopen("ssnd.out", "w");
    for(i=0; i<t; i++){
      fscanf(fin, "%d", &n);
      d=0;
      nrd=smd=1;
      while(d<nrp && 1LL*prime[d]*prime[d]<=n){
        expo=0; prod=1;
        while(n%prime[d]==0){
          ++expo;
          prod*=prime[d];
          n/=prime[d];
        }
        nrd*=(expo+1);
        smd=((prod*prime[d]-1)/(prime[d]-1))%MOD;
        ++d;
      }
      if(n>1){
        nrd*=2;
        smd=(smd*(n+1))%MOD;
      }
      fprintf(fout, "%d %d\n", nrd, smd);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}