Pagini recente » Cod sursa (job #2035179) | Cod sursa (job #827269) | Cod sursa (job #2358543) | Cod sursa (job #703466) | Cod sursa (job #3213752)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
const int RAD = 1e6;
const int MOD = 9973;
vector <int> prime;
void ciur()
{
bitset <RAD+1> c;
for (int i = 2; i * i <= RAD; i++)
{
if (!c[i])
{
for (int mult = i * i; mult <= RAD; mult += i)
{
c[mult] = true;
}
}
}
for (int i = 2; i <= RAD; i++)
{
if (!c[i])
{
prime.push_back(i);
}
}
}
long long putere(long long a, int n)
{
long long p = 1;
while (n != 0)
{
if (n % 2 != 0)
{
p *= a;
}
a *= a;
n /= 2;
}
return p;
}
void sum_nr_div(long long n, int &nr, int &sum)
{
int ndp = prime.size(), i = 0;
long long nr_l = 1;
long long sum_l = 1;
while (i < ndp && (long long)prime[i] * prime[i] <= n)
{
int d = prime[i];
if (n % d == 0)
{
int p = 0;
while (n % d == 0)
{
p++;
n /= d;
}
nr_l *= (p + 1);
sum_l *= ((putere(d, p + 1) - 1) / (d - 1));
}
i++;
}
if (n != 1)
{
nr_l *= 2;
sum_l *= (n + 1);
}
nr = nr_l % MOD;
sum = sum_l % MOD;
}
int main()
{
ifstream in("ssnd.in");
ofstream out("ssnd.out");
ciur();
int t;
in >> t;
for (int i = 0; i < t; i++)
{
long long n;
int s, nr;
in >> n;
sum_nr_div(n, nr, s);
out << nr << " " << s << "\n";
}
in.close();
out.close();
return 0;
}