Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/tiberiud | Monitorul de evaluare | Istoria paginii utilizator/moldo_razvan | Cod sursa (job #1689871)
#include <cstdio>
#define MAX_P 1000006
#define MOD 9973
using namespace std;
int t;
long long nr;
int viz[MAX_P], prime[MAX_P];
void ciur()
{
prime[++prime[0]]=2;
for(int i=3;i<MAX_P;i+=2)
{
if(viz[i]==0)
{
prime[++prime[0]]=i;
for(int j=i+i+i;j<MAX_P;j+=(i << 1))
viz[j]=1;
}
}
}
long long lg_power(int nr, int exp)
{
if(exp==0)
return 1;
if(exp%2==0)
{
long long half=lg_power(nr, exp/2);
return (1LL*half*half)%MOD;
}
if(exp%2==1)
return (1LL*nr*lg_power(nr, exp-1))%MOD;
}
void solve()
{
scanf("%lld", &nr);
int nd=1, sd=1;
for(int i=1;i<=prime[0] && i*i<=nr;i++)
{
if(nr%prime[i])
continue;
int p=0;
while(nr%prime[i]==0)
{
p++;
nr/=prime[i];
}
nd=nd*(p+1);
int p1=(lg_power(prime[i], p+1)-1)%MOD;
int p2=(lg_power(prime[i]-1, MOD-2))%MOD;
sd=(1LL*((1LL*sd*p1)%MOD)*p2)%MOD;
}
if(nr>1)
{
nd=nd*2;
sd=(1LL*sd*(nr+1))%MOD;
}
printf("%d %d\n", nd, sd);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
ciur();
scanf("%d", &t);
while(t--)
solve();
}