Pagini recente » Cod sursa (job #1852710) | Cod sursa (job #2809229) | Cod sursa (job #521095) | Cod sursa (job #2514062) | Cod sursa (job #3254323)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
const int MOD = 9973;
const int RMAX = 1e6;
void constructie_prime(vector <int> &pr)
{
bitset <RMAX + 1> e_prim;
e_prim.set();
for (int div = 2; div * div <= RMAX; div++)
{
if (e_prim[div])
{
for (int mult = div * div; mult <= RMAX; mult += div)
{
e_prim[mult] = 0;
}
}
}
for (int i = 2; i <= RMAX; i++)
{
if (e_prim[i])
{
pr.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 ssnd(long long n, vector <int> &pr, int &nrd, long long &sumd)
{
nrd = sumd = 1;
int i = 0;
while (i < (int)pr.size() && (long long)pr[i] * pr[i] <= n)
{
int d = pr[i];
if (n % d == 0)
{
int p = 0;
while (n % d == 0)
{
p++;
n /= d;
}
nrd *= (p + 1);
sumd *= (putere(d, p + 1) - 1) / (d - 1);
}
i++;
}
if (n != 1)
{
nrd *= 2;
sumd *= (n + 1);
}
}
int main()
{
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int t;
in >> t;
vector <int> prime;
constructie_prime(prime);
for (int i = 0; i < t; i++)
{
long long n;
in >> n;
int nr;
long long sum;
ssnd(n, prime, nr, sum);
out << nr << " " << sum % MOD << "\n";
}
in.close();
out.close();
return 0;
}