Pagini recente » Cod sursa (job #2626533) | Cod sursa (job #579870) | Cod sursa (job #2943359) | Cod sursa (job #895076) | Cod sursa (job #969693)
Cod sursa(job #969693)
#include<cstdio>
#include<bitset>
#include<cstring>
using namespace std;
const int MOD = 9973;
const int NMAX = 1000000;
int T,i,j,P[NMAX/10],p,F[100],E[100],M,Numar;
long long N,Suma;
bitset<NMAX> viz;
void Ciur()
{
P[++p]=2;
for(i=3;i<=1000;i+=2)
if(!viz[i])
{
P[++p]=i;
for(j=i*i;j<=NMAX;j+=i) viz[j]=1;
}
for(;i<=NMAX;i+=2) if(!viz[i]) P[++p]=i;
}
long long Power(long long A,long long E)
{
long long Rez=1;
for(int i=1;i<=E;i<<=1)
{
if(i&E) Rez=(Rez*A)%MOD;
A=(A*A)%MOD;
}
return Rez;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
Ciur();
scanf("%d",&T);
for(;T;T--)
{
scanf("%lld",&N); M=0; memset(E,0,sizeof(E));
for(i=1;i<=p && P[i]*P[i]<=N;i++)
if(N%P[i]==0)
{
F[++M]=P[i];
while(N%P[i]==0) N/=P[i],E[M]++;
}
if(N>1) F[++M]=N,E[M]=1;
Numar=Suma=1;
for(i=1;i<=M;i++)
{
Numar=Numar*(E[i]+1);
Suma=(Suma*(Power(F[i],E[i]+1)-1)%MOD*Power(F[i]-1,MOD-2)%MOD)%MOD;
}
printf("%d %lld\n",Numar,Suma);
}
return 0;
}