Pagini recente » Cod sursa (job #2973273) | Cod sursa (job #1048936) | Cod sursa (job #2483726) | Cod sursa (job #2710125) | Cod sursa (job #1745163)
#include <fstream>
#include <vector>
using namespace std;
bool b[1000006];
vector<long long> v;
vector<int> pr, f;
vector< pair<int, int> > dv;
void read();
void sieve();
void solve();
int main(){
read();
sieve();
solve();
return 0;
}
void read(){
ifstream fin ("ssnd.in");
long long x;
int test;
fin >> test;
while (test--)
fin >> x,
v.push_back(x);
fin.close();
}
void sieve(){
for (int d = 2; d * d <= 1000001; ++d)
if (!b[d])
for (int i = d * d; i <= 1000001; i += d)
b[i] = 1;
for (int i = 2; i <= 1000001; ++i)
if (!b[i])
pr.push_back(i);
}
void solve(){
ofstream fout ("ssnd.out");
long long nr, sm;
for (unsigned int i = 0; i < v.size(); ++i){
long long n = v[i];
dv.clear();
f.clear();
for (int j = 0; pr[j] * pr[j] <= v[i]; ++j)
if (!(n%pr[j])){
int r(0);
f.push_back(1);
while (!(n % pr[j]))
++r,
f[f.size()-1] *= pr[j],
n /= pr[j];
f[f.size()-1] *= pr[j];
dv.push_back(make_pair(pr[j], r));
}
if (!f.size()){
fout << "2 " << n+1 << "\n";
continue;
}
nr = 1, sm = 1;
for (unsigned int i = 0; i < dv.size(); ++i)
nr *= dv[i].second+1,
sm *= (f[i]-1)/(dv[i].first-1),
sm = sm % 9973;
fout << nr << " " << sm << "\n";
}
fout.close();
}