Pagini recente » Cod sursa (job #1754228) | Cod sursa (job #2536806) | Cod sursa (job #3149576) | Cod sursa (job #3236289) | Cod sursa (job #1466620)
#include <fstream>
#include <bitset>
using namespace std;
ofstream fout("ssnd.out");
ifstream fin("ssnd.in");
const int NMAX = 1000005;
const int MOD = 9973;
long long t, n;
long long prime[NMAX], p[NMAX], d[NMAX];
bitset<NMAX> ciur;
void construieste_ciur()
{
ciur.set();
ciur[0] = ciur[1] = false;
for(int i=2; i<NMAX; i++) {
if(ciur[i]){
prime[++prime[0]] = i;
for(int j=i+i; j<NMAX; j+=i)
ciur[i] = false;
}
}
}
long long pow(long b, long e)
{
long long sol = 1;
b %= MOD;
while(e) {
if(e & 1) sol *= b, sol %= MOD;
b *= b, b %= MOD;
e >>= 1;
}
return sol;
}
int main()
{
construieste_ciur();
fin >> t;
for(int i=1; i<=t; i++)
{
long long j = 1, nr = 1, suma = 1;
fin >> n;
while(n > 1) {
if(n % prime[j] == 0) {
p[++p[0]] = prime[j];
while(n % prime[j] == 0) {
d[p[0]]++;
n /= prime[j];
}
}
j++;
}
for(int i=1; i<=p[0]; i++)
nr *= (d[i] + 1);
for(int i=1; i<=p[0]; i++)
suma *= (((pow(p[i], d[i] + 1) - 1) / (p[i] - 1)) % MOD);
fout << nr << ' ' << suma % MOD << '\n';
for(int i=1; i<=p[0]; i++) d[i] = 0, p[i] = 0;
p[0] = 0;
d[0] = 0;
}
return 0;
}