Cod sursa(job #862448)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 22 ianuarie 2013 18:23:47
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <math.h>
#include <bitset>

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


int i,j,t,nr,p,m,v[1000010],b[80001],nr1;
long long div,div2,s,x,l,maxi,a[1001],maxim;
void ciur()
{
  v[2]=0;
  nr1=1;
  b[nr1]=2;
  for(i=3;i<=maxim;i+=2)
    if (v[i]==0)
    {
        nr1++;
        b[nr1]=i;
      for(j=3;i*j<=maxim;j+=2)
       v[i*j]=1;
    }
}

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

      div=div*b[j]-1;
      s=(s*(div/(b[j]-1)))%9973;
        nr=nr*(p+1);

    }
    j++;
 }
     if (l!=1){nr=nr*2;s=(s*(l*l-1)/(l-1))%9973;}
  fprintf(g,"%d %d\n",nr,s);
 }
fclose(g);
return 0;
}