Pagini recente » Cod sursa (job #1115710) | Cod sursa (job #2322049) | Cod sursa (job #3176222) | Cod sursa (job #307422) | Cod sursa (job #901635)
Cod sursa(job #901635)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
using namespace std;
unsigned int ciur[31261];
vector <int> prime;
inline bool Get_Bit (unsigned int K)
{
return (ciur[K >> 5] & (1 << (K & 31)));
}
inline void Put_Bit (unsigned int K)
{
ciur[K >> 5] |= (1 << (K & 31));
}
void Precalc ()
{
prime.pb (2);
for (unsigned int i = 3; i < 1000001; i += 2)
{
if (!Get_Bit (i))
{
prime.pb (i);
for (unsigned int j = i * i; j <= 1000001; j += i)
Put_Bit (j);
}
}
}
inline ll Calc (int prim, int nr_div)
{
ll dog = pow (prim, nr_div) - 1;
return dog / (prim - 1);
}
int main ()
{
int T;
ll N;
Precalc ();
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
fin >> T;
for (; T; T--)
{
fin >> N;
int divizori = 1;
ll suma = 1;
for (int i = 0; 1LL * prime[i] * prime[i] <= N; i++)
{
if (!(N % prime[i]))
{
int nr_div = 1;
while (!(N % prime[i]))
{
nr_div++;
N /= prime[i];
}
divizori *= nr_div;
suma *= Calc (prime[i], nr_div);
}
}
if (N > 1)
{
divizori <<= 1;
suma *= Calc (N, 2);
}
fout << divizori << " " << suma % 9973 << "\n";
}
fin.close ();
fout.close ();
return 0;
}