Pagini recente » Cod sursa (job #296826) | Cod sursa (job #1674117) | Cod sursa (job #2715570) | Cod sursa (job #872147) | Cod sursa (job #2085812)
#include <cstdio>
#include <vector>
#include <cassert>
#define MOD 9973
using namespace std;
FILE *in = fopen("ssnd.in","r");
FILE *out = fopen("ssnd.out","w");
bool prim[1000005];
int t;
vector <int> num;
void ciur()
{
prim[1]=1;
num.push_back(2);
for(int i=3; i*i <= 1000000; i+=2)
if(prim[i]==0)
{
num.push_back(i);
for(int j=i*i; j <= 1000000; j+=i)
prim[j]=1;
}
}
int putere(long long x,long long e)
{
long long r=1;
for(int d=0; (1<<d) <= e; d++)
{
if((1<<d)&e)
{
r=(r*x)%MOD;
}
x=(x*x)%MOD;
}
return r;
}
int invmod(long long x)
{
return putere(x,MOD-2);
}
void desc(long long x)
{
int e,k=0,p=1,sums=1,sumj=1;
assert(num[k] != 0);
while(x!=1 && num[k]*num[k] <= x)
{
e=0;
while(x%num[k]==0)
{
e++;
x/=num[k];
}
p*=e+1;
if(e>0)
{
sums = (sums * (putere(num[k],e + 1)+MOD-1)%MOD ) %MOD;
sumj = (sumj * (num[k]-1)) % MOD;
}
k++;
}
if(x!=1)
{
sums = (sums * (putere(x,2)+MOD-1)%MOD) %MOD;
sumj = (sumj * (x-1)) % MOD;
p*=2;
}
fprintf(out,"%d %d\n",p,(sums*invmod(sumj))%MOD);
}
int main()
{
fscanf(in,"%d",&t);
ciur();
while(t)
{
long long x;
fscanf(in,"%lld",&x);
desc(x);
t--;
}
return 0;
}