Pagini recente » Cod sursa (job #851435) | Cod sursa (job #2489847) | Cod sursa (job #2132544) | Cod sursa (job #2909044) | Cod sursa (job #2131432)
#include<fstream>
#include<bitset>
using namespace std;
const int MOD = 9973;
int poz = 1;
long long primes[1000005];
bitset <1000005> v;
long long int suma, nrdiv;
int fastpower(int a,int p)
{
int sol = 1;
a %= MOD; /// %mod is required since numbers get can too large to fit into long long
while(p)
{
if(p & 1) sol = (sol * a) % MOD; /// by p&1 we verify parity in faster way
a = (a * a) % MOD;
p >>= 1; /// multiply by 2
}
return sol;
}
/// puts all the primes into Prim array, until 1 million there are around 78000 primes
void Sieve()
{
v[0] = 1;
v[1] = 1;
primes[poz++] = 2;
for (int i = 4;i <= 1000000;i += 2)
v[i] = 1;
for (int i = 3;i <= 1000000;i += 2)
{
if (v[i] == 0)
{
primes[poz++] = i;
for (int j = 2 * i;j <= 1000000;j += i)
v[j] = 1;
}
}
}
int invers_mod(int a)
{
return fastpower(a, MOD - 2);
}
void suma_numar_div(long long int n)
{
long long int cnt = 0;
suma = 1;
nrdiv = 1;
/// we multiply primes[i]* primes[i] by 1LL since primes[i]*primes[i] can be over int
for(int i = 1; i < poz && 1LL * primes[i]* primes[i] <= n ; i++) /// poz means number of primes
{
if(n % primes[i] == 0)
{
cnt = 0;
while(n % primes[i] == 0)
{
cnt++;
n /= primes[i];
}
nrdiv *= 1LL * (cnt + 1) % MOD;
nrdiv %= MOD;
suma *= (fastpower(primes[i],cnt + 1) - 1) / (primes[i] - 1);
}
}
if(n > 1) /// that means we have 1 more prime factor
{
nrdiv = 2LL * nrdiv % MOD;
suma = 1LL * suma * (n + 1) % MOD;
}
}
int main()
{
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long t,n;
/// This program calculates sum of the divisors of T (T<1000) numbers and each number can be max 1 billion!!!
Sieve();
fin >> t;
while(t--)
{
fin >> n;
suma_numar_div(n);
fout << nrdiv << " " << suma << '\n';
}
return 0;
}