Pagini recente » Cod sursa (job #1867120) | Cod sursa (job #2246336)
#include <iostream>
#include <fstream>
#include <vector>
#define MOD 9973
#define MAX 1000001
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
bool ciur[MAX];
long long primes[MAX];
int nrPrimes;
long long Lgput(long long a, long long n)
{
long long sol = 1;
while(n)
{
if(n & 1)
sol *= a;
n /= 2;
a *= a;
}
return sol;
}
void MakeCiur()
{
for(int i = 2; i*i < MAX; ++i)
{
if(ciur[i] == 0)
{
for(int j = i*i; j < MAX; j+=i)
{
ciur[j] = 1;
}
}
}
for(int i = 2; i < MAX; ++i)
if(!ciur[i])
primes[++nrPrimes] = i;
}
int main()
{
MakeCiur();
long long n,t;
fi>>t;
while(t--)
{
fi>>n;
if(n == 1)
{
fo << 1 << ' ' << 1 << '\n';
continue;
}
long long sum = 1, card = 1;
long long m = n;
for(int i = 1; i <= nrPrimes && primes[i] * primes[i] <= m; ++i)
{
if(n % primes[i] == 0)
{
int e = 0;
while(n % primes[i] == 0)
{
e++;
n /= primes[i];
}
card = card * (e+1);
sum = (sum * ((Lgput(primes[i],e+1) - 1)/(primes[i] - 1)));
card %= MOD;
sum %= MOD;
}
}
if(n != 1)
{
sum = sum * (n+1);
card = card*2;
card %= MOD;
sum %= MOD;
}
fo<<card<<' '<<sum<<'\n';
}
}