Pagini recente » album2 | Cod sursa (job #553646) | Cod sursa (job #2003055) | Cod sursa (job #1616827) | Cod sursa (job #432387)
Cod sursa(job #432387)
#include<stdio.h>
#include<vector>
using namespace std;
#define mod 9973
#define plm long long
const plm Nmax = 1000005;
plm A;
int e[Nmax],p[Nmax],k;
int nr[Nmax],cur,sol,M;
vector <plm> pr;
int sum;
void ciur()
{
for(plm i=2;i<Nmax;++i)
if (!e[i])
{
for(plm j=i*i;j<Nmax;j+=i)
e[j]=1;
p[++k]=i;
}
}
int pw(int A,int B)
{
int rez,pwe=A%mod;
for(rez=1; B ; B/=2)
{
if (B%2==1)
rez = (rez * pwe)%mod;
pwe = (pwe * pwe)%mod;
}
return rez;
}
int gcd(int A,int B,int &X,int &Y)
{
if (B==0)
{
X=1;
Y=0;
return A;
}
int X0,Y0,D;
D = gcd(B,A%B,X0,Y0);
X = Y0;
Y = X0 - (A/B)*Y0;
return D;
}
void solve()
{
pr.clear();
int M=-1,X,Y;
plm b=A;
for(int i=1; b>1 && 1LL*p[i]*p[i]<=b;++i)
if (b%p[i]==0)
{
pr.push_back(p[i]);
nr[++M]=0;
for(;b%p[i]==0; b/=p[i] , ++nr[M]);
}
if (b>1)
{
pr.push_back(b);
nr[++M]=1;
}
sol=1;
for(int i=0;i<=M;++i)
sol *= (nr[i]+1);
printf("%d ",sol);
sum=1;
for(int i=0;i<=M;++i)
{
cur = pw(pr[i],nr[i]+1) - 1;
gcd(pr[i]-1,mod,X,Y);
while(X<0) X+=mod;
sum =(((sum*cur)%mod)*X)% mod;
}
printf("%d\n",sum);
}
int main()
{
int T;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
ciur();
for(;T;--T)
{
scanf("%lld",&A);
solve();
}
return 0;
}