Pagini recente » Cod sursa (job #2371892) | Cod sursa (job #1982231) | Cod sursa (job #1329725) | Cod sursa (job #956921) | Cod sursa (job #481731)
Cod sursa(job #481731)
#include <cstdio>
#include <vector>
using namespace std;
typedef long long i64;
const int SQRT_B=1000005;
const int MOD=9973;
#define pb push_back
bool prim[SQRT_B];
vector<int> Primes;
void eratostene()
{
int i,j;
for (i=0;i<SQRT_B;++i) prim[i]=true;
prim[0]=prim[1]=false;
for (i=2;i<SQRT_B;++i)
if (prim[i])
for (j=i*2;j<SQRT_B;j+=i) prim[j]=false;
Primes.reserve(200000);
for (i=2;i<SQRT_B;++i)
if (prim[i]) Primes.pb(i);
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int T;
i64 N;
scanf("%d",&T);
eratostene();
while (T--)
{
scanf("%lld",&N);
if (N==1) { printf("1 1\n"); continue; }
int nr_div=1, sum_div=1;
for (vector<int>::iterator it=Primes.begin();it!=Primes.end();++it)
{
if ((i64) *it * *it > N) break;
if (N % *it == 0)
{
int exp=0;
while (N % *it == 0) N/= *it, ++exp;
nr_div*=(exp+1);
int sum=0;
for (int x=1,j=0;j<=exp;++j,x=(x* *it)%MOD)
sum=(sum+x)%MOD;
sum_div=(sum_div*sum)%MOD;
}
}
if (N > 1)
{
nr_div*=2;
sum_div=(sum_div*(1+N))%MOD;
}
printf("%d %d\n",nr_div,sum_div);
}
return 0;
}