Pagini recente » Cod sursa (job #1820263) | Cod sursa (job #1564189) | Cod sursa (job #1418604) | Cod sursa (job #481162) | Cod sursa (job #822450)
Cod sursa(job #822450)
#include<cstdio>
#include<bitset>
#include<vector>
#include<utility>
#define M 9973
using namespace std;
vector<int> prime;
bitset<500005> P;
int n;
int putere(int p,int k)
{
int o=p,i,s=1;
for(i=k;i;i>>=1)
{
if(i&1)
{
s*=o;
s%=M;
}
o*=o;
o%=M;
}
return s;
}
void invmod(int a,int b,int *x,int *y)
{
if(b==0)
{
*x=1;
*y=0;
return;
}
else
{
int x0,y0;
invmod(b,a%b,&x0,&y0);
*x=y0;
*y=x0-(a/b)*y0;
}
}
void descompunere()
{
int k,p=0,ok=0,nrdiv=1,sdiv=1,x,y;
vector<int>::iterator it=prime.begin();
for(;n!=1&&it!=prime.end();it++)
{
k=*it;
if(n%k==0)
{
p=0; ok=1;//desc.push_back(make_pair(k,0));
}
for(;n%k==0;p++,n/=k);
if(ok==1)
{
nrdiv=nrdiv*(p+1);
invmod(k-1,M,&x,&y);
for(;x<0;x+=M);
sdiv=(sdiv*((putere(k,p+1)-1)*x))%M;
}
}
if(n!=1)
{
k=n; p=1;
nrdiv=nrdiv*(p+1);
invmod(k-1,M,&x,&y);
for(;x<0;x+=M);
sdiv=(sdiv*((putere(k,p+1)-1)*x))%M;
}
printf("%d %d\n",nrdiv,sdiv);
}
int main()
{
int i,j,t;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&t);
prime.push_back(2);
for(i=1;i<=500000;i++)
{
if(!P[i])
{
prime.push_back(2*i+1);
for(j=3*i+1;j<=500000;j+=2*i+1) P[j]=1;
}
}
for(;t;t--)
{
scanf("%d",&n);
descompunere();
}
return 0;
}