Pagini recente » Cod sursa (job #38963) | Cod sursa (job #175032) | Cod sursa (job #2407664) | Cod sursa (job #864089) | Cod sursa (job #1423897)
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <utility>
#include <algorithm>
#include <bitset>
#include <vector>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#define ll long long
#define llu unsigned long long
#define rep(i, a, b) for (int i = (a) ; i <= (b) ; ++i)
#define mp make_pair
#define pii pair <int, int>
#define SORT(x) sort ((x).begin(), (x).end() )
#define fi first
#define se second
static const int NMAX = 1e6;
static const int MOD = 9973;
using namespace std;
bitset <NMAX> rpz;
vector <int> v;
void ciuruiala() {
v . push_back (2);
for (int i = 3 ; i <= NMAX; i+=2)
rpz[i] = 1;
for (int i = 3 ; i <= NMAX; i+=2)
{
if ( ! rpz[i])
continue;
v.push_back(i);
for (int j = (i << 1) + i ; j <= NMAX; j += ( i << 1))
rpz[j] = 0;
}
}
inline int bitput (int x, int bit){
int ans = 1;
x %= MOD;
for (; bit; bit >>= 1, x = (x * x) % MOD)
if (bit & 1) ans = (ans * x) % MOD;
return ans ;
}
inline pii Queryala (ll x) {
int pow, ND, SD, numr, invers, i;
ND = SD = 1;
for ( i = 0 ; i < (int) v.size() && 1LL * v[i] * v[i] <= x; i++) {
if (x % v[i]) continue;
pow = 0;
while (x % v[i] == 0 )
++pow, x/= v[i];
ND*= (pow + 1);
numr = (bitput(v[i], pow + 1) - 1 )% MOD;
invers = bitput (v[i] - 1 , MOD - 2) % MOD;
SD = (SD*numr) % MOD;
SD = (SD*invers) % MOD;
}
if ( x > 1 ) {
ND *= 2;
SD = (1LL * SD * (x + 1) % MOD);
}
pii solve = mp (ND, SD);
return solve;
}
int main(){
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
int query;
ll x;
ciuruiala();
for (fin >> query; query; query--) {
fin >> x;
int nrd = Queryala(x).fi, SSD = Queryala(x). se;
fout << nrd << " " << SSD << "\n";
}
return 0;
}