Pagini recente » Cod sursa (job #72491) | Cod sursa (job #591784) | Cod sursa (job #571847) | Cod sursa (job #2692382) | Cod sursa (job #2479568)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
typedef long long lint;
struct stupit{
lint k, l;
};
bool frecu[1000041];
vector<int> primes;
void primeit(){
for(int i = 2; i <= 1000000; i++){
if(!frecu[i]){
primes.push_back(i);
for(int j = i+i; j <= 1000000; j += i){
frecu[j] = true;
}
}
}
}
const int modit = 9973;
stupit verseit(lint a, lint b){
if(b == 0){
return {1, 0};
}
stupit pr = verseit(b, a%b);
return {pr.l, pr.k-pr.l*(a/b)};
}
int inverseit(int a){
return (verseit(a, modit).k + modit) % modit;
}
int n;
void solveit(){
lint a;
fin >> a;
lint cer = 1, sol = 1;
for(int i = 0; i < primes.size() && a != 1; i++){
int p = primes[i], q = p, c = 1;
while(a % p == 0){
a /= p;
q *= p;
c++;
}
if(c > 1){
sol *= (q-1);
sol *= inverseit(p-1);
sol %= modit;
cer *= c;
}
}
if(a != 1){
lint b = a;
b %= modit;
b *= a;
b %= modit;
b = b-1+modit;
b %= modit;
sol *= b;
sol *= inverseit(a-1);
sol %= modit;
cer *= 2;
}
fout << cer << " " << sol << "\n";
}
int main(){
primeit();
fin >> n;
for(int i = 0; i < n; i++){
solveit();
}
}