Pagini recente » Cod sursa (job #2709858) | Cod sursa (job #3154006) | Cod sursa (job #1532016) | Jobs | Cod sursa (job #799514)
Cod sursa(job #799514)
#include <fstream>
#define LL long long
#define MOD 9973
using namespace std;
int t,nr;
LL n,nrdiv;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int MAXSIZE = 1000001;
int r [80000];
char w [MAXSIZE]; //w[i] == 0 if i is prime
/*
//class PrimeNumbersSieve1
final int MAXSIZE = 1000001;
char[] p = new char[MAXSIZE];
//p[i] == 0 if i is prime
public int getTheNumber(int n) {
int i, j, nr = 0;
for (i = 2; i <= n; ++i) {
if (p[i] == 0) {
nr++;
for (j = i + i; j <= n; j += i) {
p[j] = 1;
}
}
}
return nr;
}
*/
inline void ciur()
{ int i, j;
for (i = 2; i <= 1000000; ++i)
if (w[i] == 0)
{ r[++nr]=i;
for (j = i + i; j <= 1000000; j += i) w[j] = 1;
}
}
inline LL calc(LL a, int k)
{ LL p=a;
for(int i=2; i<=k; ++i) p *=a;
return p;
}
inline void desc( LL n )
{ int i = 1,d;
LL nrdiv=1,prod,sum=1;
while(n > 1 && i<=nr)
{ if(!(n%r[i]))
{
d = 0; prod=1;
while(!(n%r[i]))
{ d++;
n/=r[i];
}
d++;
prod = calc(r[i],d)-1;
prod = (prod / (r[i]-1)) % MOD;
sum = (sum * prod) % MOD;
nrdiv = nrdiv * d;
}
i++;
}
if(n>1)
{ nrdiv = nrdiv * 2;
sum = (sum * (n+1)) % MOD;
}
g<<nrdiv<<' '<<sum<<'\n';
}
int main()
{
ciur();
f >> t;
while(t--)
{
f >> n;
desc( n );
}
g.close(); return 0;
}