Pagini recente » Cod sursa (job #575367) | Cod sursa (job #1038964) | Cod sursa (job #547099) | Cod sursa (job #2708706) | Cod sursa (job #799112)
Cod sursa(job #799112)
#include<fstream>
#define LL long long
#define M 9973
#define NMAX 1000009 // un numar are divizori pana la jumatatea lui => n = 10^12 =>d <= 10^6
using namespace std;
LL n, d[50], p[50];
int t, k,semn[NMAX], ciur[NMAX],lng = 0;
/*inline void eratosthenes()
{
for(int i = 2; i <= NMAX; i+=2) semn[i] = 1;
ciur[0] = 2;
lng = 1;
for(int i = 3; i <= NMAX; i += 2)
{
if(!semn[i])
{
ciur[lng] = i;
lng++;
for(int j = i; j <= NMAX; j += i)semn[j] = 1;
}
}
}*/
inline void descompune(LL n, LL d[], LL p[], int &k)
{
LL x = 2;
k = 0;
int i = 0;
while(n > 1)
{
if(!(n % x))
{
k++;
p[k] = x;
d[k] = 0;
while(!(n % x))
{
d[k]++;
n /= x;
}
}
x++;
}
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f>>t;
//eratosthenes();
for(int r = 1; r <= t; ++r)
{
f>>n;
LL nr;
LL sum;
descompune(n, d, p, k);
nr = 1;
sum = 1;
LL putere;
for(int i = 1; i <= k; ++i)
{
nr =(nr *(d[i] + 1)) % M;
putere = 1;
for(int j = 1; j <= d[i] + 1; ++j)
putere =(putere * p[i]) % M;
putere--;
putere = (putere/(p[i] - 1))%M;
sum = (sum * putere) % M;
}
g<<nr<<' '<<sum <<'\n';
}
g.close();
return 0;
}