Cod sursa(job #419360)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 17 martie 2010 13:14:55
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
FILE *f,*g;
long put(long a,long b)
{ long i=2; long rez=a;
  for(i=2;i<=b;i++) rez=rez*a;
  return rez;
}
int t; long  i,viz[1005000],j,n,prim[1005000],x,s,nr,d,k;
int main()
{ f=fopen("ssnd.in","r"); g=fopen("ssnd.out","w");
  fscanf(f,"%d",&t);
  i=2; 
  while(i<=100000) { if(viz[i]==0) { j=2*i; while(j<=100000) { viz[j]=1; j+=i; } } if(i==2) i++; else i+=2; }
  n=0;
  for(i=2;i<=100000;i++) if(!viz[i]) { n++; prim[n]=i; }
  for(i=1;i<=t;i++)
   { fscanf(f,"%ld",&x);
     s=1; nr=1; d=1; 
	 while(prim[d]*prim[d]<=x&&x!=1)
	  { k=0;
	    while(x%prim[d]==0) { x/=prim[d]; k++; }
		nr=nr*(k+1); s=s*(put(prim[d],k+1)-1)/(prim[d]-1);
		d++;
	  }
	 if(x!=1) { nr=nr*2; s=s*(x*x-1)/(x-1); } 
	 fprintf(g,"%ld %ld\n",nr,s);
   }
  fclose(g);
  return 0;
}