Cod sursa(job #598741)

Utilizator mlazariLazari Mihai mlazari Data 26 iunie 2011 21:29:56
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
 #include<fstream>

 #define NMAX 1000003
 #define MOD 9973

 using namespace std;

 ifstream fi("ssnd.in");
 ofstream fo("ssnd.out");
 long long n;
 int pr[NMAX],f;
 char p;
 long long fp,nr,sum;
 bool isNotPr[NMAX+1];
 int t,nPr,nf;

 void primeNumbers() {
   int i,j;
   i=2;
   do {
     pr[nPr++]=i;
     for(j=i+i;j<NMAX;j+=i) isNotPr[j]=1;
     do ++i; while(isNotPr[i]);
   } while(i<NMAX);
 }

void decompose(long long n) {
  nr=sum=1;
  nf=0;
  int i=0;
  while(i<NMAX && n>1) {
    if(!(n%pr[i])) {
      f=pr[i];
      p=0;
      fp=1;
      do {
        n/=f;
        ++p;
        fp*=f;
      } while(!(n%f));
      ++nf;
      nr*=(p+1);
      sum=sum*((fp*f-1)/(f-1))%MOD;
    }
    ++i;
  }
  if(n>1) {
    f=n;
    p=1;
    fp=n;
    nr*=(p+1);
    sum=sum*((fp*f-1)/(f-1))%MOD;
  }
}

int main() {
  primeNumbers();
  fi>>t;
  while(t--) {
    fi>>n;
    decompose(n);
    fo<<nr<<' '<<sum<<"\n";
  }
  return 0;
}