Pagini recente » Cod sursa (job #2348192) | Cod sursa (job #2942661) | Cod sursa (job #2875345) | Cod sursa (job #1989339) | Cod sursa (job #1466496)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <algorithm>
#define limit 1000002
#define primes 78505
#define MOD 9973
using namespace std;
vector<long long> ciur;
char ok[1000002];
void getCiur()
{
for(int i = 2; i < limit; i++)
{
if(ok[i] == 0)
{
for(long long j = i + i; j < limit - 1; j += i)
{
ok[j] = 1;
}
ciur.push_back(i);
}
}
}
long long putere(long long x, long long p)
{
long long prod = 1;
while(p > 1)
{
if(p % 2 == 0)
{
p /= 2;
x *= x;
}
else
{
p--;
prod *= x;
}
}
return (prod * x);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int t;
scanf("%i", &t);
getCiur();
for(int k = 0; k < t; k++)
{
long long n;
scanf("%lld", &n);
long long special = n;
int nr = 0;
bool ok = 1;
int nrDivizori = 1;
int sumaDivizori = 1;
for(int i = 0; i < ciur.size(); i++)
{
if(n == 1)
{
break;
}
int put = 0;
while(n % ciur[i] == 0)
{
n /= ciur[i];
put++;
ok = 0;
}
if(put != 0)
{
nrDivizori *= (put + 1);
sumaDivizori *= (putere(ciur[i], put + 1) - 1) / (ciur[i] - 1);
sumaDivizori %= MOD;
}
}
if(ok == 1)
{
nrDivizori += 1;
sumaDivizori = special + 1;
}
printf("%i %i\n", nrDivizori, sumaDivizori);
}
return 0;
}