Pagini recente » Cod sursa (job #2237478) | Cod sursa (job #664746) | Cod sursa (job #1682365) | Cod sursa (job #1536859) | Cod sursa (job #1984980)
#include<fstream>
#include<vector>
#include<string>
#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;
int ciur[NMAX];
vector <int> primes;
long long power(long long int baza, long long int exponent)
{
long long 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);
aux = 0;
int numarator = (power(primes[i], nr + 1) - 1 + modo) % modo;
//fout <<numarator<<"---\n";
int numitor = power(primes[i] - 1, modo - 2);
aux = (1LL * numarator * numitor) % modo;
sumaDivizori = (sumaDivizori * aux) % 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 <= N; i = i + 2)
{
//fout << i <<"\n";
if(ciur[i] == 0)
{
//fout << i <<"\n";
primes.push_back(i);
for(long long j = 1LL*i * i ; j <= N; j = j + i)
{
//fout << j <<"\n";
ciur[j] = 1;
}
}
}
}
int main()
{
init();
fin >> t;
for(i = 1; i <= t; i++)
{
fin >> n;
solve(n);
}
}