Pagini recente » Cod sursa (job #2285112) | Cod sursa (job #2931896) | Cod sursa (job #2739521) | Cod sursa (job #1862072) | Cod sursa (job #419153)
Cod sursa(job #419153)
#include<iostream>
#include<string>
using namespace std;
#define NM 1000005
#define MOD 9973
#define LL long long
char ciur[NM];
int primes[NM],dim;
void euclid(int a,int b,int &x,int &y)
{
if(!b)
{
x=1,y=0;
return ;
}
euclid(b,a%b,x,y);
int nx=y,ny=x-(a/b)*y;
x=nx,y=ny;
}
int invmod(int A,int N)
{
int x,y;
euclid(A,N,x,y);
while(x<0) x+=N;
return x;
}
int main()
{
int T,q[100],k;
LL p[100];
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
for(int i=2;i<=1000000;++i)
if(!ciur[i])
{
primes[++dim]=i;
for(int j=2*i;j<=1000000;j+=i)
ciur[j]=1;
}
scanf("%d",&T);
LL N;
while(T--)
{
scanf("%lld",&N);
LL nr=N;
k=0;
for(int i=1;i<=dim && nr>1;++i)
{
if((LL)primes[i]*primes[i]>N) break;
if(nr%primes[i]==0)
{
p[++k]=primes[i];
q[k]=0;
while(nr%primes[i]==0)
{
++q[k];
nr/=primes[i];
}
}
}
if(nr>1)
{
p[++k]=nr;
q[k]=1;
}
int card=1,sum=1;
for(int i=1;i<=k;++i)
card=(card*(q[i]+1))%MOD;
for(int i=1;i<=k;++i)
{
int p_la_q=1;
for(int j=1;j<=q[i]+1;++j)
p_la_q=(p_la_q*p[i])%MOD;
p_la_q--;
if(p_la_q<0) p_la_q+=MOD;
sum=(sum*p_la_q)%MOD;
int invm=invmod(p[i]-1,MOD);
sum=(sum*invm)%MOD;
}
printf("%d %d\n",card,sum);
}
return 0;
}