Cod sursa(job #2428534)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 5 iunie 2019 18:08:06
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <bitset>

using namespace std;

ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

bitset <1000001> v;

int t, p[200], pp, ii, e;
long long n, nrd, sumd, x;

int main (){

      v[0]=1;
      v[1]=1;
      for(int i=2; i*i<=1000000; i++){

            if(v[i] == 0){
                  pp++;
                  p[pp]=i;

                  for(int j=i*i; j<=1000000; j+=i)
                        v[j]=1;
            }
      }

      fin>>t;

      for(int pas=1; pas<=t; pas++){

            fin>>n;
            ii=1;
            nrd=1;
            sumd=1;

            while(p[ii] * p[ii] <= n){
                  e=0;
                  while(n%p[ii] == 0){
                        e++;
                        n=n/p[ii];
                  }
                  if(e == 0){
                        ii++;
                        continue;
                  }

                  nrd=nrd * (e+1);

                  x=pow(p[ii], e+1);
                  sumd*=((x-1)/ (p[ii]-1)) %9973;

                  ii++;
            }

            if(n != 1){
                  sumd*=((n*n-1)/(n-1))%9973;
                  nrd*=2;
            }

            fout<<nrd<<" "<<sumd<<"\n";
      }

      return 0;
}