Pagini recente » Cod sursa (job #3267431) | Cod sursa (job #1039266) | Cod sursa (job #2250498) | Cod sursa (job #1795734) | Cod sursa (job #1025895)
#include <fstream>
#include <iostream>
#include <map>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
map<long long, int> getPrimeDecomposition(long long N){
map<long long, int> result;
long long k;
int pow;
pair<long long, int> p;
for (k = 2; k <= N; k++){
pow = 0;
while (N % k == 0){
N = N / k;
pow++;
}
if (pow > 0){
p.first = k;
p.second = pow;
result.insert(p);
}
}
return result;
}
long long getDivisorSum(map<long long, int> primeDiviors){
map<long long, int> :: iterator it;
long long result = 1, p;
int pow, prime;
for (it = primeDiviors.begin(); it != primeDiviors.end(); it++){
prime = it -> first;
pow = it -> second;
p = 1;
long long sum = 0;
for (int i = 0; i <= pow; i++){
sum+=p;
p*=prime;
}
result*=sum;
}
return result;
}
int getNumberOfDivisors(map<long long, int> primeDivisors){
map<long long, int> :: iterator it;
int n = 1;
for (it = primeDivisors.begin(); it != primeDivisors.end(); it++){
n*=(1 + it -> second);
}
return n;
}
void solve(long long N){
map<long long, int> result = getPrimeDecomposition(N);
int numberDivisors = getNumberOfDivisors(result);
long long divisorSum = getDivisorSum(result);
g << numberDivisors << " " << divisorSum % 9973 << "\n";
}
int main() {
int t;
long long N;
f >> t;
for (int i = 1; i <= t; i++){
f >> N;
solve(N);
}
f.close();
g.close();
return 0;
}