Pagini recente » Monitorul de evaluare | Cod sursa (job #2099733)
#include <bits/stdc++.h>
#define in "ssnd.in"
#define out "ssnd.out"
#define oo 9973
#define nmax 1000050
using namespace std;
ifstream fin(in);
ofstream fout(out);
int t;
int n;
bitset <nmax> ciur;
int prime[nmax],k;
void Prim()
{
int i,j;
ciur[0] = 1;
ciur[1] = 1;
for (i = 4; i <= nmax; i += 2)
ciur[i] = 1;
for (i = 3; i*i <= nmax; i += 2)
if (ciur[i] == 0)
for (j = i*i; j <= nmax; j+= (2*i))
ciur[j] = 1;
k = 1;
prime[1] = 2;
for (i = 3; i < nmax; i += 2)
if (ciur[i] == 0) prime[++k] = i;
}
long long RidLog(long long x, int n)
{
long long p = 1;
while (n > 0)
{
if (n & 1)
{
p *= x;
n--;
}
x = x * x;
n >>= 1 ;
}
return p;
}
void Ssnd(int n)
{
int i,p;
long long sum = 1, nrdiv = 1;
for (i = 1; i <= n; i++)
if (n % prime[i] == 0)
{
p = 0;
while (n % prime[i] == 0)
{
p++;
n /= prime[i];
}
nrdiv = nrdiv * (p+1);
sum = sum * (RidLog(prime[i],p+1) - 1) / (prime[i] - 1) % oo;
}
fout << nrdiv << " " << sum % oo << "\n";
}
int main()
{
Prim();
fin >> t;
while (t--)
{
fin >> n;
Ssnd(n);
}
fin.close();
fout.close();
return 0;
}