Cod sursa(job #2975238)

Utilizator vladburacBurac Vlad vladburac Data 5 februarie 2023 21:44:05
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXV = 1e6;
const int MOD = 9973;

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

bool ciur[MAXV+1];
int prime[MAXV+1];
int k;

int lgput( int n, int put ) {
  int rez = 1;
  while( put ) {
    if( put % 2 == 1 )
      rez = rez * n % MOD;
    n = n * n % MOD;
    put /= 2;
  }
  return rez;
}

int invMod( int a ) {
  return lgput( a, MOD - 2 );
}
signed main() {
  int t, i, j, n, sum, nr, exp;
  for( i = 2; i <= MAXV; i++ )
    ciur[i] = true;
  for( i = 2; i * i <= MAXV; i++ ) {
    if( ciur[i] ) {
      for( j = i * i; j <= MAXV; j += i )
        ciur[j] = false;
    }
  }
  k = 0;
  for( i = 2; i <= MAXV; i++ ) {
    if( ciur[i] )
      prime[k++] = i;
  }
  fin >> t;
  while( t-- ) {
    fin >> n;
    nr = 1;
    sum = 1;
    for( i = 0; i < k && prime[i] * prime[i] <= n; i++ ) {
      if( n % prime[i] == 0 ) {
        exp = 0;
        while( n % prime[i] == 0 ) {
          exp++;
          n /= prime[i];
        }
        sum = sum * ( lgput( prime[i], exp + 1 ) - 1 ) % MOD * invMod( prime[i] - 1 ) % MOD;
        nr = nr * ( exp + 1 ) % MOD;
      }
    }
    fout << nr << " " << sum << "\n";
  }
  return 0;
}