Pagini recente » Cod sursa (job #834714) | Cod sursa (job #767232) | Cod sursa (job #2217743) | Cod sursa (job #1683958) | Cod sursa (job #1463774)
#include <bits/stdc++.h>
using namespace std;
const int MAXP=10e6+100;
#define MAXN 1001
#define MOD 9973
int t,n;
vector<int> prime;
vector<int> d[MAXN];
vector<int> e[MAXN];
bitset<MAXP>prim;
void ciur(int n) {
prim[2]=0;
prime.push_back(2);
for(int i=3;i<=n;i++){
if(!prim[i]){
prime.push_back(i);
for(int j=3*i;j<=n;j+=2*i)
prim[j]=1;
}
}
}
int lgpow(int b,int e){
if(e==0) return 1;
if(e&1==0){
b=(1LL*b*b)%MOD;
return lgpow(b,e/2);
}
return (1LL*b*lgpow(b,e-1))%MOD;
}
#define invMod(a) lgpow(a,MOD-2)
void solve(int n) {
int _n=n;
int nrDiv=1,sumaDiv=1;
for(auto p : prime){
if(p*p > n)
break;
if(n % p == 0){
d[_n].push_back(p);
e[_n].push_back(0);
while(n%p==0){
e[_n].back()++;
n/=p;
}
sumaDiv*=(lgpow(d[_n].back(),e[_n].back()+1)-1)%MOD;
sumaDiv*=(invMod(d[_n].back()-1))%MOD;
nrDiv*=(e[_n].back()+1);
}
}
if(n > 1){
nrDiv*=2; // dk+1
sumaDiv*=(n+1)%MOD;
}
printf("%d %d\n",nrDiv,sumaDiv);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%d",&t);
ciur(MAXP);
int s;
while(t--) {
s=0;
scanf("%d",&n);
solve(n);
}
return 0;
}