Cod sursa(job #2427560)

Utilizator PrekzursilAndrei Visalon Prekzursil Data 31 mai 2019 23:30:18
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int const modulo = 9973;
int const nmax = 1e6;
int prime[1 + nmax], np;
bitset <1 + nmax> ciur;
void computeciur() {
  for(int i = 2; i <= nmax; i++){
    if(ciur[i] == 0) {
      np++;
      prime[np] = i;
      if(1LL * i * i <= nmax) {
        for(int j = i * i; j <= nmax; j += i) {
          ciur[j] = 1;
        }
      }
    }
  }
}
void solve(long long n){
  int ans, sum, fact, temp;
  ans = sum = 1;
  for(int i = 1; i <= np && 1LL * prime[i] * prime[i] <= n; i++) {
    fact = 1;
    temp = sum;
    while(n % prime[i] == 0){
      n /= prime[i];
      fact++;
      sum = ((sum * (prime[i] % modulo)) + temp) % modulo;
    }
    ans *= fact;
  }
  if(n != 1){
    ans *= 2;
    sum = (sum * (n % modulo) + sum) % modulo;
  }
  out << ans << ' '<<sum<<'\n';
}
int main()
{
    int p;
    long long n;
    in >> p;
    computeciur();
    for(int i = 1;i <= p;i++){
      in >> n;
      solve(n);
    }
    return 0;
}