Pagini recente » Cod sursa (job #3216997) | Cod sursa (job #1053592) | Cod sursa (job #1765803) | Cod sursa (job #2489121) | Cod sursa (job #2812693)
#include <fstream>
#include <iostream>
using namespace std;
int t,k;
long long n;
bool ciur[1000002];
long long prime[80000];
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int putere(int x, int p) {
int rez = 1;
x %= 9973;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= 9973;
}
x *= x;
x %= 9973;
}
return rez;
}
void calcul(long long n){
int nrdiv = 1;
long long suma = 1;
int i = 1;
while(i <= k && prime[i]*prime[i] <= n){
int p = 0;
long long d = prime[i];
while(n%d == 0){
n /= d;
p++;
}
/// d ^ p
if(p != 0){
nrdiv *= (p+1);
int p1 = (putere(prime[i], p+1) - 1) % 9973;
int p2 = putere(prime[i]-1, 9973-2) % 9973;
suma = (((suma * p1) % 9973) * p2) % 9973;
}
i++;
}
if(n != 1){
/// n ^ 1
nrdiv *= 2;
suma = (1LL*suma*(n+1) % 9973);
}
fout << nrdiv << " " << suma << "\n";
}
int main()
{
for(int i = 3; i <= 1000; i += 2){
if(ciur[i] == 0){
for(int j = i*2; j < 1000000; j++){
ciur[j] = 1;
}
}
}
k = 1;
prime[1] = 2;
for(int i = 3; i <= 1000000; i += 2){
if(ciur[i] == 0){
prime[++k] = i;
}
}
fin >> t;
for(int i = 1; i <= t; i++){
fin >> n;
calcul(n);
}
return 0;
}