Pagini recente » Cod sursa (job #3032357) | Cod sursa (job #2687370) | Cod sursa (job #2574574) | Cod sursa (job #665620) | Cod sursa (job #2683084)
#include <bits/stdc++.h>
#define nmax 1000006
#define ll long long
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bitset < nmax > isprime;
ll primes[100005];
int nrprimes;
ll mod = 9973;
ll n,fact,sumdiv,nrdiv,invmod;
ll t,px,dx;
ll a,b,x,y;
void correct_modular() {
if (x<1) {
int need = x-1;
need = -need;
if (need%mod==0) {
x += need;
}
else {
need /= mod;
need++;
x += need*mod;
}
}
}
int invers_modular(ll a,ll b) {
if (b!=0) {
invers_modular(b,a%b);
}
if (b==0) {
x = 1;
y = 0;
}
else {
ll aux = x;
x = y;
y = aux - (a/b)*y;
}
}
void ciur() {
for (ll i=2;i<=nmax;i++) {
if (isprime[i]==0) {
for (ll j=i*i;j<=nmax;j+=i) {
isprime[j] = 1;
}
primes[++nrprimes]=i;
}
}
}
void calculate_fact() {
fact = px%mod;
while (n%px==0) {
n/=px;
dx++;
fact = (fact*px)%mod;
}
fact--;
if (fact==-1) {
fact += mod;
}
}
int main()
{
ciur();
f >> t;
for (ll o=1;o<=t;o++) {
f >> n;
nrdiv = 1;
sumdiv = 1;
for (ll k=1;primes[k]*primes[k]<=n;k++) {
px = primes[k];
dx = 0;
if (n%px==0) {
calculate_fact();
invers_modular(px-1,mod);
correct_modular();
invmod = x;
sumdiv = (((sumdiv%mod)*(invmod%mod)%mod)*(fact%mod))%mod;
nrdiv *= (dx+1);
}
}
if (n!=1) {
fact = ((n%mod)*(n%mod))%mod;
fact--;
if (fact==-1) {
fact += mod;
}
invers_modular(n-1,mod);
correct_modular();
invmod = x;
sumdiv = (((sumdiv%mod)*(invmod%mod)%mod)*(fact%mod))%mod;
nrdiv *= 2;
}
g << nrdiv << " " << sumdiv << '\n';
}
return 0;
}