Cod sursa(job #419379)

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