Pagini recente » Cod sursa (job #823702) | Cod sursa (job #514627) | Cod sursa (job #3255179) | Cod sursa (job #237648) | Cod sursa (job #1025908)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
const int NMAX = 1000001;
int prime[NMAX], size;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
void primes(){
size = 1;
prime[1] = 2;
bool ok;
for (int i = 3; i <= 1000000; i+=2){
ok = true;
for (int j = 1; prime[j] <= sqrt(i); j++)
if (i % prime[j] == 0){
ok = false;
break;
}
if (ok) {
prime[++size] = i;
}
}
}
pair<long long, int> getPrimeDecomposition(long long N){
pair<long long, int> result;
long long k = N, sum, p, totalSum = 1;
int pow, div, totalDiv = 1;
for (int i = 1; prime[i] <= sqrt(N) && i < size; i++){
pow = 0;
sum = 1;
div = 1;
while (k % prime[i] == 0){
pow++;
k /= prime[i];
div*= prime[i];
sum+= div;
}
totalSum*=sum;
totalDiv*=(1+pow);
}
if (k > 1){
totalSum*=(1+k);
totalDiv*=2;
}
result.first = totalSum;
result.second = totalDiv;
return result;
}
void solve(long long N){
pair<long long, int> p = getPrimeDecomposition(N);
g << p.second << " " << p.first % 9973 << "\n";
}
int main() {
primes();
int t;
long long N;
f >> t;
for (int i = 1; i <= t; i++){
f >> N;
solve(N);
}
f.close();
g.close();
return 0;
}