Cod sursa(job #859175)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 19 ianuarie 2013 20:09:31
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <math.h>

using namespace std;
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");


int v[1000001],i,j,t,nr,p,m;
long long div,div2,s,x,l;
void ciur()
{
  v[2]=0;
  for(i=3;i<=1000000;i+=2)
    if (v[i]==0)
    {
      for(j=3;j<=1000000/i;j+=2)
       v[i*j]=1;
    }
}

int main()
{
 fscanf(f,"%d",&t);
 ciur();
 for(i=1;i<=t;i++)
 {
  fscanf(f,"%lld",&x);
  nr=1;
  s=1;
  m=trunc(sqrt(x));
  l=x;
   for(j=2;j<=m;j++)
    if (x%j==0 && v[j]==0 &&(j%2!=0||j==2) )
    {
      p=0;
      div=1;
      while(l%j==0){
          p++;l=l/j;
          div=div*j;
      }

      div=div*j-1;
      s=(s*(div/(j-1)))%9973;
        nr=nr*(p+1);
     }
  if (l!=1){nr=nr*2;s=(s*(l*l-1)/(l-1))%9973;}
  //if (v[x]==0 && (x%2!=0)||x==2){nr=nr*2;s=(s*(x*x-1)/(x-1))%9973;}
  fprintf(g,"%d %d\n",nr,s);
 }
fclose(g);
return 0;
}