Cod sursa(job #2335097)

Utilizator lucametehauDart Monkey lucametehau Data 3 februarie 2019 16:39:14
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("ssnd.in");
ofstream cout ("ssnd.out");

int t;
long long n;

int low[1000005];
vector <int> p;

long long P(int n, int x) {
  long long sol = 1;
  for(; x; x--)
    sol *= n;
  return sol;
}

int main() {
  cin >> t;
  for(int i = 2; i <= 1000000; i++) {
    if(low[i] == 0) {
      low[i] = i;
      p.push_back(i);
    }
    for(int j = 0; j < p.size() && p[j] <= low[i] && 1LL * i * p[j] <= n; j++)
      low[i * p[j]] = p[j];
  }
  for(; t; t--) {
    cin >> n;
    int nd = 1, sd = 1;
    for(int i = 0; i < 1LL * p[i] * p[i] <= n && i < p.size(); i++) {
      if(n % p[i] == 0) {
        int e = 1;
        while(n % p[i] == 0)
          n /= p[i], e++;
        nd *= e;
        sd = 1LL * sd * (P(p[i], e) - 1) / (p[i] - 1) % 9973;
      }
    }
    cout << nd << " " << sd << "\n";
  }
  return 0;
}