Pagini recente » Cod sursa (job #1415921) | Cod sursa (job #1649687) | Cod sursa (job #3225283) | Cod sursa (job #2641122) | Cod sursa (job #2146298)
#include <iostream>
#include <bitset>
#include <cmath>
#include <cstdio>
#define MOD 9973
using namespace std;
bitset<1000001> bitset1;
int sir_p[100001], aux;
int myPow(int n, int p)
{
long long a = n, sol = 1;
for (unsigned int i = 0; (1 << i) <= p; i++)
{
if (((1 << i) & p) > 0)
{
sol = 1LL * (sol * a) % MOD;
}
a = (a * a) % MOD;
}
return sol;
}
int nr_div(int nr)
{
int t, produs = 1, suma = 1;
for(int i = 0; i < aux && nr; i++)
{
t = 0;
while(nr % sir_p[i] == 0)
{
t++;
nr /= sir_p[i];
}
produs *= t + 1;
suma *= (myPow(sir_p[i], t + 1) - 1) / (sir_p[i] - 1);
}
if(nr != 1)
{
produs *= 2;
suma *= (myPow(nr, 2) - 1) / (nr - 1) % MOD;
suma %= MOD;
}
cout << produs << " ";
return suma;
}
void ciur(int nr)
{
int root = sqrt(nr) + 1;
for(int i = 2; i <= root; i++)
{
if(bitset1[i]) continue;
for(int j = i * i; j <= root; j += i)
{
bitset1[j] = 1;
}
sir_p[aux] = i;
aux++;
}
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int n; cin >> n;
int biggest = 0, sir[n];
for(int i = 0; i < n; i++)
{
cin >> sir[i];
if(biggest < sir[i]) biggest = sir[i];
}
ciur(biggest);
for(int i = 0; i < n; i++)
{
cout << nr_div(sir[i]) << endl;
}
}