Pagini recente » Cod sursa (job #1268634) | Cod sursa (job #1963735) | Cod sursa (job #3218048) | Cod sursa (job #2077018) | Cod sursa (job #2272832)
#include <iostream>
#include <fstream>
#define PRIMEMAX 1000010
using namespace std;
bool isNotPrime[PRIMEMAX];
int primeNr[PRIMEMAX], nrOfPrimes = 0, M = 9973;
void findPrimes()
{
for (int i=2; i<PRIMEMAX; i++)
{
if (isNotPrime[i] == 0)
{
for (int j=2; j*i<PRIMEMAX; j++)
isNotPrime[j*i] = 1;
primeNr[nrOfPrimes++] = i;
}
}
}
void findModInv(long long a, long long b, long long &x, long long &y)
{
if (!b)
{
x = 1;
y = 0;
}
else
{
findModInv(b, a%b, x, y);
long long aux = y;
y = x - (a / b) * y;
x = aux;
}
}
int main()
{
findPrimes();
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long t, nr, product, exp, divSum, divNr, ok, modInv, aux, auxNr;
fin >> t;
for (int k=0; k<t; k++)
{
fin >> nr;
divNr = 1;
divSum = 1;
auxNr = nr;
for (int i=0; primeNr[i]*primeNr[i]<=auxNr; i++)
{
product = 1;
exp = 0;
ok = 0;
while (nr%primeNr[i]==0)
{
ok = 1;
nr /= primeNr[i];
exp ++;
product *= primeNr[i];
}
if (ok)
{
divNr *= (exp+1);
product *= primeNr[i];
product --;
findModInv(primeNr[i]-1, M, modInv, aux);
if (modInv<0)
modInv += M;
divSum = ( (divSum % M) * ( ( (product % M) * (modInv % M) ) % M) ) % M;
}
}
fout << divNr << " " << divSum << "\n";
}
return 0;
}