Cod sursa(job #418080)

Utilizator irene_mFMI Irina Iancu irene_m Data 15 martie 2010 13:48:15
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <cstdio>
#include <cmath>
#define infile "ssnd.in"
#define outfile "ssnd.out"
#define MaxN 1000000000
#define MaxM 1000

bool a[MaxN];
long long N,X,D,S,K;
long long p[MaxM],r[MaxM],v[MaxM];
int T;

void numar()
{
      int i;
      D=1;
      for(i=1;i<=K;i++)
            D*=(r[i]+1);
}

void suma()
{
      int i;
      double s=1;
      for(i=1;i<=K;i++)
            s*=(v[i]-1)/(p[i]-1);
      S=(long long)s;
}

void solve()
{
      long long i,j,m=(long long)sqrt(N),n;
      X=N; K=0;
      for(i=2;i<=m;i++)
            if(N%i==0 && a[i]==false)
            {
                  p[++K]=i; r[K]=0;
                  v[K]=i;
                  while(N%i==0)
                        N/=i, r[K]++, v[K]*=i;
                  n=X/i;
                  for(j=2;j<=n;j++)
                        a[j*i]=true;
            }
      if(K>0)
      {
            numar();
            suma();
      }
      else
      {
            D=2;
            S=1+X;
      }
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      scanf("%d",&T);
      for(;T;T--)
      {
            scanf("%lld",&N);
            solve();
            printf("%lld ",D);
            printf("%lld\n",S);
      }

      fclose(stdin);
      fclose(stdout);
      return 0;
}