Pagini recente » Cod sursa (job #1711093) | Cod sursa (job #2615) | Cod sursa (job #556574) | Cod sursa (job #802922) | Cod sursa (job #1350820)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
#define max 1000000
#define ULL unsigned long long
#define MOD 9973
int sieveOfEratosthenes(bool a[], int primes[]);
ULL modPow(ULL base, int exp);
int main()
{
int t, i;
long long n;
bool sieve[max + 1];
int primes[max + 1];
int k = sieveOfEratosthenes(sieve, primes);
ifstream f("ssnd.in");
f >> t;
int card, p, j, s;
ofstream g("ssnd.out");
for (i = 1; i <= t; i++)
{
f >> n;
card = s = 1;
j = 0;
while (n > 1)
{
if (n % primes[j] == 0)
{
p = 0;
while (n % primes[j] == 0)
{
p++;
n /= primes[j];
}
if (p)
{
card *= (p + 1);
s = ((s % MOD) * (((modPow(primes[j], p + 1) - 1) / (primes[j] - 1)) % MOD)) % MOD;
}
}
j++;
}
g << card << " " << s << "\n";
}
f.close();
g.close();
return 0;
}
int sieveOfEratosthenes(bool a[], int primes[])
{
int i, j, k = -1;
for (i = 2; i <= max; i++)
a[i] = true;
primes[++k] = 2;
for (i = 4; i <= max; i += 2)
a[i] = false;
for (i = 3; i <= sqrt(max); i++)
{
if (a[i])
primes[++k] = i;
for (j = i * i; j <= max; j += i + i)
a[j] = false;
}
for (i = sqrt(max) + 1; i <= max; i++)
primes[++k] = i;
return k;
}
ULL modPow(ULL base, int exp)
{
ULL result = 1;
while (exp)
{
if (exp & 1)
result *= base;
base *= base;
exp >>= 1;
}
return result;
}