Pagini recente » Cod sursa (job #1109319) | Cod sursa (job #1094473) | Cod sursa (job #764399) | Cod sursa (job #2921473) | Cod sursa (job #2586214)
#include <fstream>
using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
int t;
int k, prime[80005];
bool ciur[1000005];
const int mod = 9973;
void Eratosthene ()
{
for (int i=2; i<=1000000; i++)
{
if (ciur[i] == 0)
{
k ++, prime[k] = i;
for (int j=i+i; j<=1000000; j+=i)
ciur[j] = 1;
}
}
}
int RidicareLog (int n, int p)
{
int rez = 1;
while (p)
{
if (p % 2 == 1)
rez = (1LL * rez * n) % mod;
n = (1LL *n * n) % mod;
p /= 2;
}
return rez;
}
void Solve (long long n)
{
int nrdiv = 1;
int sumdiv = 1;
for (int i=1; 1LL * prime[i]*prime[i] <= n && i <= k; i++)
{
int p = 0;
while (n % prime[i] == 0)
{
n /= prime[i];
p ++;
}
if (p > 0)
{
nrdiv = (1LL * nrdiv * (p + 1)) % mod;
int p1 = (RidicareLog(prime[i], p+1) - 1) % mod;
int p2 = (RidicareLog(prime[i]-1, mod-2)) % mod;
sumdiv = (1LL *((sumdiv * p1) % mod) * p2) % mod;
}
}
if (n > 1)
{
nrdiv = (1LL * nrdiv * 2) % mod;
sumdiv = (1LL * sumdiv * (n + 1) % mod);
}
g << nrdiv << " " << sumdiv << "\n";
}
int main()
{
Eratosthene();
f >> t;
for (int i=1; i<=t; i++)
{
long long val;
f >> val;
Solve(val);
}
return 0;
}