Cod sursa(job #2414703)

Utilizator Rufus007Marincia Catalin Rufus007 Data 24 aprilie 2019 22:10:26
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
/**
 * @Author: catalin
 * @Date:   24-Apr-2019
 * @Last modified by:   catalin
 * @Last modified time: 24-Apr-2019
 */
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
typedef long long ll;

char eros[1000001];
void erosthenes() {
  for (int i = 0; i <= 1000000; ++i)
    eros[i] = 0;
  eros[0] = eros[1] = 1;
  for (int i = 2; i * i <= 1000000; ++i)
    if (eros[i] == 0)
      for (int j = 2; j * i <= 1000000; ++j)
        eros[i * j] = 1;
}
void ssnd(ll n, ll &suma, ll &numar) {
  if (n == 0)
    suma = numar = 0;
  else {
    suma = numar = 1;
    long long p = 0;
    for (int i = 2; i <= n && n > 1; ++i)
      if (eros[i] == 0 && n % i == 0) {
        p = 0;
        while (n > 1 && n % i == 0) {
          n /= i;
          p++;
        }
        numar *= (p + 1);
        suma *= ceil((pow(i, p + 1) - 1) / (i - 1));
      }
  }
}
int main() {
  int t;
  ll n;
  fin >> t;
  for (int i = 0; i < t; ++i) {
    fin >> n;
    ll a, b;
    ssnd(n, b, a);
    fout << a << ' ' << b << "\n";
  }
  fin.close();
  fout.close();
  return 0;
}