Pagini recente » Cod sursa (job #1219911) | Cod sursa (job #843596) | Cod sursa (job #1090175) | Cod sursa (job #1898782) | Cod sursa (job #1985002)
#include<fstream>
#include<vector>
#include<string>
#include<bitset>
#define modo 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int NMAX = 1000005;
string sir;
int i, k, j,contor,st,dr,sol,y,t;
long long int n;
bool ciur[NMAX];
vector <int> primes;
int power(int baza, int exponent)
{
int x;
if(exponent == 0) return 1;
else
{
if(exponent % 2 == 1)
{
x = power(baza ,exponent / 2);
return ((x*x)%modo*baza)%modo;
}
else
{
x = power(baza, exponent/2);
return (x*x)%modo;
}
}
}
void solve(long long x)
{
int nrDivizori = 1;
int sumaDivizori = 1;
//fout << x <<"\n";
for(int i = 0; i < primes.size() && primes[i] <= x; i++)
{
if(x % primes[i] == 0)
{
//fout << primes[i] <<" ";
long long aux = x;
int nr = 0;
while(aux != 1 && aux % primes[i] == 0)
{
aux = aux / primes[i];
nr++;
}
//fout << primes[i] << " " << nr << "\n";
nrDivizori = nrDivizori * (nr + 1);
int aux2 = 0;
int numarator = (power(primes[i] % modo, nr + 1) - 1 + modo) % modo;
//fout <<numarator<<"---\n";
int numitor = power((primes[i] - 1)%modo, modo - 2);
aux2 = (numarator * numitor) % modo;
sumaDivizori = (sumaDivizori * aux2) % modo;
}
}
fout << nrDivizori << " " << sumaDivizori<< "\n";
}
void init()
{
int N = 1000000;
int i;
for(i = 4; i <= N; i = i + 2)
{
ciur[i] = 1;
}
//primes.push_back(2);
for(i = 3; i <= 1003; i = i + 2)
{
//fout << i <<"\n";
if(ciur[i] == 0)
{
//fout << i <<"\n";
for(long long j = 1LL*i * i ; j <= N; j = j + i)
{
//fout << j <<"\n";
ciur[j] = 1;
}
}
}
for(i = 2; i <= N; i++)
{
if(ciur[i] == 0)
{
primes.push_back(i);
}
}
}
int main()
{
init();
fin >> t;
for(i = 1; i <= t; i++)
{
fin >> n;
solve(n);
}
}