Pagini recente » Cod sursa (job #1999619) | Cod sursa (job #1676145) | Cod sursa (job #750997) | Cod sursa (job #1233731) | Cod sursa (job #491382)
Cod sursa(job #491382)
#include<stdio.h>
#include<string.h>
#define Ld 1LL*1000000
#define MOD 9973
#define divizori 80000
using namespace std;
int T,i,prim[divizori],ciur[Ld+10],P,e,d;
long long Sum,n,Nrdiv;
void precalc()
{
long long i,j;
for(i=2;i<=Ld;++i)
if(!ciur[i])
{
prim[++P]=i;
for(j=i*i;j<=Ld;j+=(i<<1))
ciur[j]=1;
}
}
long long lgput(long long a,int b)
{
long long s;
for(s=1;b;b>>=1,a=(a*a)%MOD)
if(b&1) s=(s*a)%MOD;
return s;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
precalc();
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
Nrdiv=1; Sum=1;
for(d=1; prim[d]<=n; d++)
{
if(n%prim[d]==0)
{
e=1;
while(n%prim[d]==0 && n>1)
{
e++;
n/=prim[d];
}
Nrdiv*=e;
Sum *= ( ( lgput(prim[d],e)-1 ) % MOD );
Sum%=MOD;
Sum *= ( lgput(prim[d]-1,MOD-2) % MOD );
Sum%=MOD;
}
}
if(n>1)
{
Nrdiv<<=1;
Sum *= ( ( n*n-1 ) % MOD );
Sum%=MOD;
Sum *= ( lgput(n-1,MOD-2) % MOD );
Sum%=MOD;
}
printf("%lld %lld\n",Nrdiv,Sum);
}
return 0;
}