Cod sursa(job #865582)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 26 ianuarie 2013 17:40:38
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include<math.h>
FILE *in,*out;
using namespace std;
int t,exponent;
long long nr,n,u,i,j,poz;
long long v[5000002];unsigned long long prod;
bool  c[1000002];
int main()
{
    in=fopen("ssnd.in","rt");
    out=fopen("ssnd.out", "wt");
    fscanf(in, "%d", &t);

    for(i=2;i<=1000001; i++)
          if (!c[i])
           { v[++u]=i;
               for (j=i+i; j<=1000000; j+=i)
                   c[j]=1;
           }


    for (i=1 ; i<=t ; i++)
     {
         fscanf(in, "%lld", &n);
         nr=1;
         prod=1;poz=1;
         while (n>1)
          {
              exponent=0;
              while (n%v[poz]==0)
                 {
                     n/=v[poz];

                     exponent++;
                 }
                //calc nr de divizori
                if(exponent)
                {

                exponent++;
                 nr*=(exponent);

                 //calc suma diviz
                 prod*=(pow(v[poz], exponent)-1)/(v[poz]-1);

                }
                poz++;
          }
          fprintf(out, "%.lld %.lld\n", nr, prod%9973);
     }


    fclose(in);
    fclose(out);
    return 0;
}