Pagini recente » Cod sursa (job #2717424) | Cod sursa (job #3183343) | Cod sursa (job #2487700) | Cod sursa (job #2672634) | Cod sursa (job #1214106)
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
typedef long long ll;
const int mod = 9973;
int a[1000005],prime[1000005],k;
void ciur(int n){
for(int i = 2; i <= sqrt((double)n); i++){
if(!a[i]){
for(int j = i * i; j <= n; j += i){
a[j] = 1;
}
}
}
for(int i = 2; i <= n; i++)
if(!(a[i] & 1))
prime[k++] = i;
}
inline int pow_mod(int a, int b){
int res = 1;
while(b){
if(b & 1)
res = (res * a) % mod;
a = ((ll)a *(ll) a) % mod;
b >>= 1;
}
return res;
}
inline int inverse_mod(int a){
int x0 = 1,y0 = 0,x1 = 0,y1 = 1;
int b = mod;
while(b){
int r = a % b;
int x,y,q = a / b;
a = b;
b = r;
x = x0 - q * x1;
y = y0 - q * y1;
x0 = x1; y0 = y1;
x1 = x; y1 = y;
}
return (mod + x0) % mod;
}
void solve(ll n){
int divNo = 1,divSum = 1;
for(int i = 0; i < k; i++){
if((ll)prime[i] * (ll)prime[i] > n)
break;
int exp = 1;
while(n % (ll)prime[i] == 0){
exp++;
n /= (ll)prime[i];
}
if(exp > 1){
divNo = (divNo * exp);
divSum = (divSum * ((pow_mod(prime[i],exp) - 1) * inverse_mod(prime[i] - 1) % mod)) % mod;
}
}
if(n > 1){
divNo <<= 1;
divSum = (divSum * (n + 1)) % mod;
}
printf("%d %d\n", divNo,divSum);
}
int main(){
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
ciur(1000000);
int t;
ll n;
scanf("%d",&t);
while(t--){
scanf("%lld",&n);
solve(n);
}
return 0;
}