Pagini recente » Cod sursa (job #2907796) | Cod sursa (job #1155801) | Cod sursa (job #1797359) | Cod sursa (job #703365) | Cod sursa (job #799422)
Cod sursa(job #799422)
#include<fstream>
#define LL long long
#define M 9973
#define NMAX 1000008 // un numar are divizori pana la jumatatea lui => n = 10^12 =>d <= 10^6
using namespace std;
LL n, d[50], p[50], nr, sum;
int t, k,semn[NMAX + 8], ciur[NMAX + 8],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 + i; j + i <= NMAX; j += i)semn[j] = 1;
}
}
}
inline void descompune(LL n, LL &nr, LL &sum)
{
int putere = 1;
nr = sum = 1;
LL numar;
int i = 0;
int d = 0;
if(semn[n])
{
while(n > 1)
{
if(!(n % ciur[i]))
{
d = 0;
LL s = 1;
while(!(n % ciur[i]))
{
d++;
n /= ciur[i];
}
putere = 1;
for(int j = 1; j <= d; ++j)
{
putere = putere * ciur[i];
s += putere;
}
sum = (sum * s) % M;
nr = (nr * (1+ d)) % M;
}
i++;
}
}
else
{
nr = 2;
sum = (1 + n) % M;
}
}
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;
nr = 1;
sum = 1;
descompune(n, nr, sum);
g<<nr<<' '<<sum <<'\n';
}
g.close();
return 0;
}